2010-01-09 100 views
5

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

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

我可以做些什么来将我的回调传递给SWIG,以便它了解它?

回答

3

我没有Windows机器真能遏制这一点,但我认为你需要创建一个类型映射告诉痛饮如何将的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; 
}