我可以使用生成的swig代码将C ++对象转换为PyObject吗?

我正在使用swig将Python嵌入到我的C ++程序中。 目前我有一个用C ++编写的对象,我想传递给一个python函数。 我创建了swig界面来包装类。

我想要做的是把我创建的这个C ++对象,并将它传递给一个Python函数,并具有像在C ++中一样使用它的能力。 我可以使用swig生成的代码来执行此操作吗? 如果不是,我该如何解决这个问题?


您可以使用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;
}

我想我已经有了这个参考计数的权利,但我不完全确定。

链接地址: http://www.djcxy.com/p/48327.html

上一篇: Can I use generated swig code to convert C++ object to PyObject?

下一篇: SWIG C++ bindings with callback