Вы можете использовать PyObject_CallMethod для передачи вновь созданного объекта обратно в python.Предполагая, что ModuleName.object
- это объект python с методом methodName
, который вы хотите передать недавно созданному объекту C ++, который вы хотите примерно (из памяти, я не могу сейчас это проверить) сделать это в C ++:
int callPython() {
PyObject* module = PyImport_ImportModule("ModuleName");
if (!module)
return 0;
// Get an object to call method on from ModuleName
PyObject* python_object = PyObject_CallMethod(module, "object", "O", module);
if (!python_object) {
PyErr_Print();
Py_DecRef(module);
return 0;
}
// SWIGTYPE_p_Foo should be the SWIGTYPE for your wrapped class and
// SWIG_POINTER_NEW is a flag indicating ownership of the new object
PyObject *instance = SWIG_NewPointerObj(SWIG_as_voidptr(new Foo()), SWIGTYPE_p_Foo, SWIG_POINTER_NEW);
PyObject *result = PyObject_CallMethod(python_object, "methodName", "O", instance);
// Do something with result?
Py_DecRef(instance);
Py_DecRef(result);
Py_DecRef(module);
return 1;
}
Я думаю У меня есть право подсчета ссылок для этого, но я не совсем уверен.