2010-01-09 2 views
5

함수 포인터 (WNDPROC)를 예상하고 ctypes.WINFUNCTYPE에 의해 래핑 된 파이썬 함수를 제공하고자하는 SWIG C++ 함수가 있습니다.SWIG에 대한 파이썬 ctypes 콜백 함수

이것이 호환되어야하지만 SWIG의 유형 검사는 ctypes.WINFUNCTYPE 유형이 실제로 WNDPROC라는 것을 모르기 때문에 예외를 throw합니다.

콜백을 이해하기 위해 SWIG에 전달하려면 어떻게해야합니까?

답변

3

난 정말이를 확인하는 윈도우 머신이없는,하지만 난 당신이 분에게 WNDPROC에의 PyObject 래퍼를 변환하는 방법을 꿀꺽 꿀꺽하는 타입 맵을 만들 필요가 있다고 생각 :

// assuming the wrapped object has an attribute "pointer" which contains 
// the numerical address of the WNDPROC 
%typemap(in) WNDPROC { 
    PyObject * addrobj = PyObject_GetAttrString($input, "pointer"); 
    void * ptr = PyLong_AsVoidPt(addrobj); 
    $1 = (WNDPROC)ptr; 
}