我打算在我的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)
。