Python ctypes回调函数到SWIG的转换

6

我有一个 SWIG C++ 函数,它需要一个函数指针 (WNDPROC),我想把它传递给用 ctypes.WINFUNCTYPE 封装的 Python 函数。

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

我该怎么做才能将我的回调函数传递给 SWIG,让它理解它呢?

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接