2010-01-09 11 views
5

Ich habe eine SWIG C++ - Funktion, die einen Funktionszeiger (WNDPROC) erwartet, und möchte ihm eine Python-Funktion geben, die von ctypes.WINFUNCTYPE umschlossen wurde.Python Ctypes Callback-Funktion zu SWIG

Es scheint mir, dass dies kompatibel sein sollte, aber die Typüberprüfung von SWIG löst eine Ausnahme aus, weil es nicht weiß, dass der Typ ctypes.WINFUNCTYPE eigentlich ein WNDPROC ist.

Was kann ich tun, um meinen Rückruf an SWIG zu übergeben, damit er es versteht?

Antwort

3

Ich habe keinen Windows-Rechner dies wirklich zu überprüfen, aber ich glaube, Sie brauchen eine typemap erstellen zu sagen swig wie der PyObject Wrapper zu einem WNDPROC konvertieren:

// 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; 
}