我有一个需要函数指针 (WNDPROC) 的 SWIG C++ 函数,并想给它一个已被 ctypes.WINFUNCTYPE 包装的 Python 函数。
在我看来,这应该是兼容的,但是 SWIG 的类型检查会抛出异常,因为它不知道 ctypes.WINFUNCTYPE 类型实际上是一个 WNDPROC。
我该怎么做才能将我的回调传递给 SWIG 以便它理解它?
最佳答案
我没有 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;
}
关于c++ - Python ctypes 回调函数到 SWIG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2032470/