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

问题描述

| 我正在使用swig将python嵌入到我的C ++程序中。目前,我有一个用C ++编写的对象,希望将其传递给python函数。我创建了Swig接口来包装该类。 我想做的就是将这个我创建的C ++对象,并传递给python函数,使其能够像在C ++中一样使用它。我可以使用swig生成的代码来做到这一点吗?如果没有,我该如何处理?     

解决方法

您可以使用PyObject_CallMethod将新创建的对象传递回python。假设
ModuleName.object
是一个带有
methodName
方法的python对象,您想将一个新创建的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\",instance);
   // Do something with result?

   Py_DecRef(instance);
   Py_DecRef(result);  
   Py_DecRef(module);

   return 1;
}
我想我已经有了正确的参考文献,但是我不确定。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...