我正在编写一个需要加载Python模块的C ++应用程序,并调用该模块中的函数。 应用程序需要传递给python函数一个C ++ claseses作为参数。 我设法从C ++代码调用python代码,但我只设法传递" primative"作为参数的类型。
我使用SWIG创建包装器/接口,但是我没能找到如何将我的C ++类从应用程序转换为PyObject *,以便将它作为参数传递给python函数。
您知道在哪里可以找到有关如何从C ++执行转换到PyObject *的信息吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
我仍然没有解决方案,我只有以下解决方法: 1.我从实例创建一个PyObject,并将其传递给python函数。 2. python代码使用SWIG生成的库中的函数将PyObject转换为类的python版本。
实现:
在C ++文件中
MyClass myObject;
...
PyObject *parameterForPython = PyCObject_FromVoidPtr(&myObject, NULL); // step 1
PyTuple_SetItem(pyArgs, 0, parameterForPython);
PyObject_CallObject(pythonFunctionObject, pyArgs);
在swig接口文件中(步骤2的代码):
%inline %{
MyClass *convertPyObjectToMyClass(PyObject * ptr) {
return (MyClass *)PyCObject_AsVoidPtr(ptr)
}
%}
在python模块中:
def myPythonFunction(ptr):
myObject = cppmodule.convertPyObjectToMyClass(ptr) #step 2
答案 2 :(得分:0)
您是否考虑过使用SWIG_NewPointerObj(ptr, type, flags)
或SWIG_ConvertPtr(obj, pptr, type, flags)
?
您可以通过运行:
来获得这些声明swig -python -external-runtime swig-python.h