我有一个SWIG C ++函数需要一个函数指针(WNDPROC),并希望给它一个由ctypes.WINFUNCTYPE包装的Python函数。
在我看来,这应该是兼容的,但是SWIG的类型检查会引发异常,因为它不知道ctypes.WINFUNCTYPE类型实际上是WNDPROC。
我可以做些什么来将我的回调传递给SWIG,以便它理解它?
答案 0 :(得分:3)
我没有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;
}