Python ctypes回调函数到SWIG
我有一个用SWIG写的C++函数,它需要一个函数指针(WNDPROC),我想把一个用ctypes.WINFUNCTYPE包装过的Python函数传给它。
我觉得这应该是可以兼容的,但SWIG在检查类型时抛出了一个异常,因为它不知道ctypes.WINFUNCTYPE其实是一个WNDPROC。
我该怎么做才能把我的回调函数传给SWIG,让它明白呢?
1 个回答
4
我没有Windows电脑来实际检查这个问题,但我觉得你需要创建一个类型映射(typemap),这样可以告诉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;
}