Simple question: How to pass a C++ class reference to a callback?

T. Panbru panbru at comcast.net
Tue Sep 2 09:11:13 EDT 2003


Try encapsulating your C++ class reference in a CObject, using:

     PyObject* PyCObject_FromVoidPtr( void* cobj, void (*destr)(void *))
     void* PyCObject_AsVoidPtr( PyObject* self)

and so forth, to go back and forth between the C++ and Python realms.

Check out the Python docs at:

     http://www.python.org/doc/2.3/api/cObjects.html

Tim

 > Harri Pesonen wrote:
> How do I pass the calling C++ class reference (or anything) to a callback?
> My code is:
> 
> static PyObject*
> emb_Set(PyObject *self, PyObject *args)
> {
>     char *key, *value;
>     if(!PyArg_ParseTuple(args, "ss", &key, &value))
>         return NULL;
>     // do something with the C++ class here
>     // how the get the class instance pointer?
>     Py_INCREF(Py_None);
>     return Py_None;
> }
> 
> static PyMethodDef EmbMethods[] = {
>     {"Set", emb_Set, METH_VARARGS, "Sets the given variable."},
>     {NULL, NULL, 0, NULL}
> };
> 
> in C++ class:
> 
>     Py_Initialize();
>     Py_InitModule("test", EmbMethods);
>     PyRun_SimpleString(script);
>     Py_Finalize();
> 
> Harri





More information about the Python-list mailing list