Python ctypes 回调函数给出 "TypeError: invalid result type for callback function"

标签 python ctypes ffi

我计划在我的 Python 应用程序中使用由 DLL 导出的 C 函数。这个特定的函数将多个回调作为参数,所以我一直在摆弄在 python 中使用 ctypes 定义此类回调。但是,我很快就陷入了这个简单的测试:

from ctypes import *

someFunction = CFUNCTYPE(POINTER(c_long), c_long)

def someFunctionPy(someLong):
    return pointer(c_long(someLong))


print POINTER(c_long)
print someFunctionPy(1)

someFunctionImpl = someFunction(someFunctionPy)

然后可以将 someFunctionImpl 作为参数传递给 C 函数。这给了我以下错误:

<class '__main__.LP_c_long'>
<__main__.LP_c_long object at 0x022928F0>
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    someFunctionImpl = someFunction(someFunctionPy)
TypeError: invalid result type for callback function

打印输出告诉我该函数返回了一个正确类型的对象,那么我在这里缺少什么?

编辑:当我使用 someFunction = CFUNCTYPE(c_void_p, c_long) 时它似乎确实有效,即使 c_void_pPOINTER(c_long) 有不同的类型。嗯?

但这并没有真正帮助,因为最终我将不得不使用预定义的 CFUNCTYPE,它具有 POINTER(c_int) 作为返回类型。

最佳答案

目前这是不可能的。参见 this CPython bug report .

关于Python ctypes 回调函数给出 "TypeError: invalid result type for callback function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005127/

相关文章:

python - python 中的 ctypes 因 memset 而崩溃

python - 使用 Python ctypes 的 C 函数名称相关段错误

python - 如何从 ctypes 结构或联合字段中获取 'type' 字段描述符

c++ - 在 Flutter Windows 桌面应用程序中使用 C++ DLL

c - 从 Ruby 访问 C 项目上的 dll 函数

python - 为什么当我读取文件数据时它不起作用,但当它们被硬编码时它却起作用?

python - 了解 Keras EarlyStopping 的行为

c++ - 混合 Haskell 和 C++

android - 在Android Studio中成功 "Rebuild Project"后执行Python脚本

python - 如何删除 Robobrowser 中的 AttributeError