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