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

Maa*_*aas 6 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)
Run Code Online (Sandbox Code Playgroud)

然后可以将wheresomeFunctionImpl作为参数传递给 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Alb*_*ert 5

目前这是不可能的。请参阅此 CPython 错误报告