Ok, my first attempt at this creates proxy objects in Python, and stores a pointer to the C++ instance in the Python object. I cast that pointer to an int and pass it as a single parameter to the object's __init__ function.
static PyObject* Actor_init(PyObject *self, PyObject *args) { PyObject* selfParam; PyObject* ptrValue; if (!PyArg_ParseTuple(args, "OO", &selfParam, &ptrValue)) return NULL; PyObject_SetAttrString(selfParam, "_cpp_ptr", ptrValue); Py_INCREF(Py_None); return Py_None; } I have no idea why self is always NULL, when I'm calling the functions as methods of an object. Any ideas why this is the case? For what it's worth I attach each method via the PyMethodDef -> PyCFunction_New -> PyMethod_New -> PyDict_SetItemString(classDict) route. To get data back from the C++ object to Python, I extract that value and cast it back to the appropriate pointer type. static PyObject* Actor_showName(PyObject *self, PyObject *args) { PyObject* selfParam; if (!PyArg_ParseTuple(args, "O", &selfParam)) return NULL; PyObject* cppPtr = PyObject_GetAttrString(selfParam, "_cpp_ptr"); long cppPtrVal = PyInt_AsLong(cppPtr); Actor* pActor = reinterpret_cast<Actor*>(cppPtrVal); // Delegate to the C++ object pActor->ShowName(); Py_INCREF(Py_None); return Py_None; } I've omitted some error checking, but this is the way I'm going for now. Are there any glaring errors I've made (apart from perhaps assuming sizeof(pointer) <= sizeof(long), that is)? And is there anywhere else more appropriate that I should be asking this question, given the lack of responses to this and my other embedding topic so far? -- Ben Sizer -- http://mail.python.org/mailman/listinfo/python-list