我需要将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'>
感谢。
答案 0 :(得分:5)
您无法从ctypes调用C ++实例方法。您将需要导出将调用该方法的非成员函数。它在C ++中看起来像这样:
void callFunc(NativeObj* obj)
{
obj->func();
}
然后你可以这样称呼它:
import ctypes
d = ctypes.cdll.LoadLibrary('dll/path')
obj = d.createNativeObj()
d.callFunc(obj)
告诉ctypes
涉及的类型也很有用。
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)