2010-01-09 26 views
5

Tengo una función SWIG C++ que espera un puntero a función (WNDPROC), y quiero darle una función de Python que ha sido envuelto por ctypes.WINFUNCTYPE.Python función de devolución de llamada ctypes a SWIG

Me parece que esto debería ser compatible, pero la comprobación de tipos de SWIG arroja una excepción porque no sabe que el tipo ctypes.WINFUNCTYPE es en realidad un WNDPROC.

¿Qué puedo hacer para pasar mi devolución de llamada a SWIG para que lo entienda?

Respuesta

3

no tengo una máquina de Windows para comprobar realmente esto, pero creo que es necesario para crear un typemap para contar swig cómo convertir la envoltura PyObject a un 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; 
} 
Cuestiones relacionadas