2013-10-28 2 views
2

파이썬에 C++ dll을 랩핑해야합니다. 나는 그것에 대해 ctypes 모듈을 사용하고있다.ctypes에 액세스하면 객체의 메소드가 반환됩니다.

C++ 헤더는 같은 것을 : 나는 파이썬 코드에 NativeObj를 만든 다음 그 func 메소드를 호출 할

class NativeObj 
{ 
    void func(); 
} 

extern "C" 
{ 
    NativeObj* createNativeObj(); 

}; //extern "C" 

.

는이 코드를 쓴 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(); 
} 

당신은 다음과 같이 호출 할 수 있습니다 : 또한 포함 된 유형에 대한 ctypes에게 유용 할 것

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) 
관련 문제