6

関数ポインター (WNDPROC) を期待する SWIG C++ 関数があり、ctypes.WINFUNCTYPE によってラップされた Python 関数をそれに与えたいと考えています。

これは互換性があるはずですが、ctypes.WINFUNCTYPE 型が実際には WNDPROC であることを認識していないため、SWIG の型チェックは例外をスローします。

コールバックを SWIG に渡して理解させるにはどうすればよいですか?

4

1 に答える 1

4

これを実際に確認するための 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;
}
于 2010-03-16T14:21:11.087 に答える