|
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:)
|