2010-01-09 6 views
5

J'ai une fonction SWIG C++ qui attend un pointeur de fonction (WNDPROC), et je veux lui donner une fonction Python qui a été encapsulée par ctypes.WINFUNCTYPE.Fonction de rappel ctypes Python vers SWIG

Il me semble que cela devrait être compatible, mais la vérification de type de SWIG jette une exception car il ne sait pas que le type ctypes.WINFUNCTYPE est en fait un WNDPROC.

Que puis-je faire pour transmettre mon rappel à SWIG afin qu'il le comprenne?

Répondre

3

Je n'ai pas une machine Windows pour vérifier vraiment, mais je pense que vous devez créer un typemap dire swig comment convertir l'emballage PyObject à 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; 
} 
Questions connexes