Callback from C++ to Python, how to pass args?

Christof Pastors christof_n at pastors.de
Fri Aug 18 17:42:07 EDT 2000


Now I understand!

My example was more complicated because I did not assume that a python
object is availble, I had to call the constructor within C++ ...

Bye

Ch

"Bram Stolk" <bram at sara.nl> schrieb im Newsbeitrag
news:399A5720.2FC42BA4 at sara.nl...
> Hi Christof, thanks for the help.
>
>
> As for my problem, I will try to state it more clearly.
>
> - I use SWIG to create python support for my class, including shadow
classes
> - I use a python script to create such an object:
>
> # python script
> instance = MyClass();
>
> - I register a python func with an object at some other class:
>
> oc = OtherClass();
> oc.SetCallback(mypythonfunc, instance);
>
> - Now, I have a piece of C++ code in OtherClass, that should
>   callback the python script func, with a MyClass object as argument.
>
> OtherClass::Call(void)
> {
>   // make call to registered pythonfunc with instance as arg.
> }
>
> It turned out, I could use this code:
>
>       PyObject *func;
>       PyObject *instance;
>
>       PyObject *arglist = Py_BuildValue
>       (
>         "O",
>         instance
>       );
>       PyObject *result = PyEval_CallObject((*ip).func, arglist);
>
> But only if I define some typemaps like:
>
> %typemap(python,in) PyObject *func
> {
>   $target = $source;
> }
>
> and same one for PyObjects called 'instance'.
>
> This strikes me as odd, as the typemaps do not seem to do much.
>
> Using this scheme, I can callback to python funcs, and in those
> python funcs, use the MyClass argument as a proper python object.
>
> # callback func
> def mypythonfunc(myclassobj)
>   print myclassobj;
>   myclassobj.somememberfunc();
>
> This seems to work ok now.
>
> Thanks again,
>
>     Bram
>
>
> --
> --------------------------------------------------------------------------
----
>  Bram Stolk, VR Specialist.
>  SARA Academic Computing Services Amsterdam, PO Box 94613, 1090 GP
AMSTERDAM
>  email: bram at sara.nl   Phone +31-20-5923059  Fax +31-20-6683167
>
>  "I heard if you play the NT-4.0-CD backwards, you get a satanic message."
>  "Thats nothing, if you play it forward, it installs NT-4.0"
> --------------------------------------------------------------------------
----





More information about the Python-list mailing list