2010-01-09 7 views
5

У меня есть функция SWIG C++, которая ожидает указатель на функцию (WNDPROC) и хочет дать ему функцию Python, которая была обернута ctypes.WINFUNCTYPE.Функция обратного вызова типа python для SWIG

Мне кажется, что это должно быть совместимо, но проверка типа SWIG вызывает исключение, поскольку он не знает, что тип ctypes.WINFUNCTYPE является фактически WNDPROC.

Что я могу сделать, чтобы передать свой ответ на SWIG, чтобы он его понял?

ответ

3

У меня нет машины окна, чтобы действительно проверить это, но я думаю, что вам нужно, чтобы создать TypeMap сказать, как глоток конвертировать обертку PyObject в WndProc:

// 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; 
} 
Смежные вопросы