c++ - Python ctypes 回调函数到 SWIG

标签 c++ python swig ctypes

我有一个需要函数指针 (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/

相关文章:

c++ - 查找总和除以给定数的数组的子数组数

c++ - 有没有办法到达最后的盒子 - GRAPH

python - Pandas :如何为系列中的每个值重复数据框?

python - SWIG 中的预处理器宏

C++ 指针数组声明

c++ - 暂住地址

python - 在 python 中对列表使用 if 语句?

python - Django 找不到我的静态文件

c# - 使用%typemap进行SWIG和多态C#

lua - swig 包装变量的基本赋值失败