関数ポインター (WNDPROC) を期待する SWIG C++ 関数があり、ctypes.WINFUNCTYPE によってラップされた Python 関数をそれに与えたいと考えています。
これは互換性があるはずですが、ctypes.WINFUNCTYPE 型が実際には WNDPROC であることを認識していないため、SWIG の型チェックは例外をスローします。
コールバックを SWIG に渡して理解させるにはどうすればよいですか?
これを実際に確認するための Windows マシンはありませんが、PyObject ラッパーを WNDPROC に変換する方法を swig に伝えるには、typemap を作成する必要があると思います。
// 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;
}