Python ctypes回调函数给出了“TypeError:回调函数的无效结果类型”

时间:2015-10-08 01:27:38

标签: 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_p具有不同类型,我使用POINTER(c_long)似乎也有效。咦?

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

1 个答案:

答案 0 :(得分:1)

目前无法做到这一点。请参阅this CPython bug report