From: Anton M. <am...@ab...> - 2019-11-09 20:37:46
|
Hello, Bary. Thanks! I will risk to ask for some improvements even if I do not understand completely PyCXX. I will happy if you answer any of it 1. Can you add a VS2017/19 Step-by-Step demo? I actually started using PyCXX with VS2017 so if you like I can help with this. 2. With VS 2017 I had to search for and add all .cxx files from "C:\PyCXX\Src" (cxx_extensions.cxx,. ...) to the VS project. This is not convenient. Is it possible to create with the build scripts a single lib file and I to include in my project only the libs path (from Linker > General->Additional Library Directories) ? It is similar to how Python libs are included in VS, you only include and set the link path. 3. I am confused with the demos, simple.cxx is not simple at all and is hard for me to start using it. Please advice me in the following case - I have a C++ class A. It is quite complicated and contains a lot of functions and code. I want to export this class A to Python. Is this the right approach: <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:blue;mso-ansi-language:EN-US;mso-fareast-language:EN-US">class <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF;mso-ansi-language:EN-US;mso-fareast-language:EN-US">OldClass : <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:blue;mso-ansi-language:EN-US;mso-fareast-language:EN-US">public Py:: <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF;mso-ansi-language:EN-US;mso-fareast-language:EN-US">PythonExtension <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF;mso-ansi-language:EN-US;mso-fareast-language:EN-US">OldClass > { <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:blue;mso-ansi-language:EN-US;mso-fareast-language:EN-US">public : OldClass() { } <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">virtual ~OldClass() { } <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">static <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">void init_type( <span style="font-size: 9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">void ) { behaviors().name( <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"simple.OldClass" ); behaviors().doc( <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"documentation for OldClass class" ); behaviors().supportGetattr(); add_noargs_method( <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"func1" ,& <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF;mso-ansi-language:EN-US;mso-fareast-language:EN-US">OldClass ::func1); add_varargs_method( <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"func2" ,& <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF;mso-ansi-language:EN-US;mso-fareast-language:EN-US">OldClass ::func2); add_keyword_method( <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"func3" ,& <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#2B91AF;mso-ansi-language:EN-US;mso-fareast-language:EN-US">OldClass ::func3); behaviors().readyType(); } <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:green;mso-ansi-language: EN-US;mso-fareast-language:EN-US">// override functions from PythonExtension <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">virtual Py:: <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:#2B91AF;mso-ansi-language: EN-US;mso-fareast-language:EN-US">Object getattr( <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">const <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">char * <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:gray;mso-ansi-language: EN-US;mso-fareast-language:EN-US">name ) { <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">return getattr_methods( <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:gray;mso-ansi-language:EN-US;mso-fareast-language:EN-US">name ); } Py:: <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:#2B91AF;mso-ansi-language: EN-US;mso-fareast-language:EN-US">Object func1( <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">void ) { std::cout <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:teal;mso-ansi-language:EN-US;mso-fareast-language:EN-US"> <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"func1 Called." <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family: Consolas;color:teal;mso-ansi-language:EN-US;mso-fareast-language:EN-US"> std::endl; <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">return Py::None(); } Py:: <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:#2B91AF;mso-ansi-language: EN-US;mso-fareast-language:EN-US">Object func2( <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">const Py:: <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:#2B91AF;mso-ansi-language: EN-US;mso-fareast-language:EN-US">Tuple & <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:gray;mso-ansi-language: EN-US;mso-fareast-language:EN-US">args ) { std::cout <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:teal;mso-ansi-language:EN-US;mso-fareast-language:EN-US"> <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">"func2 Called with " <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family: Consolas;color:teal;mso-ansi-language:EN-US;mso-fareast-language:EN-US"> <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:gray;mso-ansi-language:EN-US;mso-fareast-language:EN-US">args .length() <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:teal;mso-ansi-language:EN-US;mso-fareast-language:EN-US"> <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family:Consolas; color:#A31515;mso-ansi-language:EN-US;mso-fareast-language:EN-US">" normal arguments." <span style="font-size:9.5pt;font-family:Consolas;mso-bidi-font-family: Consolas;color:teal;mso-ansi-language:EN-US;mso-fareast-language:EN-US"> std::endl; <span style="font-size:9.5pt; font-family:Consolas;mso-bidi-font-family:Consolas;color:blue;mso-ansi-language: EN-US;mso-fareast-language:EN-US">return Py::None(); } private: CppClass m_cpp ; }; 4. I have in my class A many overload operators and I want to use them in Python too. For example: >>> import simple >>> a = simple.OldClass() >>> a.func1() func1 Called. >>> a.func2(5) func2 Called with 1 normal arguments. >>> b = a So far Ok but how to do with PyCXX support the following operators: >>> b += a Traceback (most recent call last): File " ", line 1, in TypeError: unsupported operand type(s) for +=: 'simple.OldClass' and 'simple.OldClass' >>> c = simple.OldClass() >>> a = b + c Traceback (most recent call last): File " ", line 1, in TypeError: unsupported operand type(s) for +: 'simple.OldClass' and 'simple.OldClass' My purpose is to expose and use in Python my C++ class as a new type. I need support for different constructors, like: >>> a = simple..OldClass("a") >>> a = simple..OldClass(5) I hope my questions are not too confusing >-------- Оригинално писмо -------- >От: Barry ba...@ba... >Относно: Re: export with PyCXX >До: Anton Milev >Изпратено на: 09.11.2019 09:36 Please join and ask on the mailing list so that there is public record of the conversation. https://sourceforge.net/projects/cxx/lists/cxx-users Barry On 9 Nov 2019, at 00:28, Anton Milev wrote: Hello, Barry. I am trying to use PyCXX with VS2017 but I am having a number of difficulties. You probably receive a lot of emails, but if you are interested I can send you my initial feedback? I am not very advanced with Python, so probably I am making something dumb:) |