2013-10-28 100 views
2

我需要將C++ dll封裝到python。我正在使用​​模塊。訪問ctypes返回對象的方法

C++頭是喜歡的東西:

class NativeObj 
{ 
    void func(); 
} 

extern "C" 
{ 
    NativeObj* createNativeObj(); 

}; //extern "C" 

我想在Python代碼來創建NativeObj,然後調用其func方法。

我寫了這個代碼,並獲得指針NativeObj,但我沒有找到如何訪問func

>>> import ctypes 
>>> d = ctypes.cdll.LoadLibrary('dll/path') 
>>> obj = d.createNativeObj() 
>>> obj 
36408838 
>>> type(obj) 
<type 'int'> 

感謝。

回答

5

您不能從ctypes調用C++實例方法。您將需要導出一個將調用該方法的非成員函數。它看起來像在C++:

void callFunc(NativeObj* obj) 
{ 
    obj->func(); 
} 

然後你可以這樣調用:

import ctypes 
d = ctypes.cdll.LoadLibrary('dll/path') 
obj = d.createNativeObj() 
d.callFunc(obj) 

這也將是告訴​​所涉及的各類有用。

import ctypes 
d = ctypes.cdll.LoadLibrary('dll/path') 

createNativeObj = d.createNativeObj 
createNativeObj.restype = ctypes.c_void_p 
callFunc = d.callFunc 
callFunc.argtypes = [ctypes.c_void_p] 

obj = createNativeObj() 
callFunc(obj)