2014-12-07 181 views
0

我在寫一個需要加載Python模塊的C++應用程序,並調用該模塊中的函數。 應用程序需要將C++類作爲參數傳遞給python函數。 我設法從C++代碼調用python代碼,但我只設法將「primative」類型作爲參數傳遞。如何從C++調用python函數時將C++類作爲參數傳遞?

我使用SWIG創建了包裝器/接口,但我未能找到如何將我的C++類從應用程序轉換爲PyObject *,以便將它作爲參數傳遞給python函數。

你知道我在哪裏可以找到有關如何從C++進行鑄造的PyObject *信息?

回答

0

我仍然沒有一個解決辦法,我只有以下解決方法:1. 我從實例創建的PyObject,並將其傳遞給Python函數。 2. Python代碼,用於將其通過SWIG產生的庫中的函數,到的PyObject轉換爲類的蟒版本。

實現:

在C++文件

MyClass myObject; 
... 
PyObject *parameterForPython = PyCObject_FromVoidPtr(&myObject, NULL); // step 1 
PyTuple_SetItem(pyArgs, 0, parameterForPython); 
PyObject_CallObject(pythonFunctionObject, pyArgs); 

在大口接口文件(步驟2代碼):

%inline %{ 
    MyClass *convertPyObjectToMyClass(PyObject * ptr) { 
     return (MyClass *)PyCObject_AsVoidPtr(ptr) 
    } 
%} 

在Python模塊:

def myPythonFunction(ptr): 
    myObject = cppmodule.convertPyObjectToMyClass(ptr) #step 2 
0

有無你考慮使用SWIG_NewPointerObj(ptr, type, flags)SWIG_ConvertPtr(obj, pptr, type, flags)

您可以通過運行具有這些聲明:

swig -python -external-runtime swig-python.h 
相關問題