6

我有一个 SWIG C++ 函数,它需要一个函数指针 (WNDPROC),并想给它一个由 ctypes.WINFUNCTYPE 包装的 Python 函数。

在我看来,这应该是兼容的,但是 SWIG 的类型检查会引发异常,因为它不知道 ctypes.WINFUNCTYPE 类型实际上是 WNDPROC。

我该怎么做才能将我的回调传递给 SWIG 以便它理解它?

4

1 回答 1

4

我没有真正检查这一点的 Windows 机器,但我认为您需要创建一个类型映射来告诉 swig 如何将 PyObject 包装器转换为 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;
}
于 2010-03-16T14:21:11.087 回答