gpt4 book ai didi

python ctypes,回调函数扩充类型是C++引用

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:18 25 4
gpt4 key购买 nike

我通过ctypes集成了一个dll到python,dll需要设置一个回调函数。但是dll回调函数声明如下

void setCallBack(void(*)(Data &a))

Data is C struct, declare as below
typedef struct {
int index,
....
}Data

我不清楚如何通过ctypes设置它,我尝试如下,但返回“WindowsError:[Error -1073741795] Windows Error 0xC000001D”错误,你能帮忙举个例子如何设置回调。

mydll = cdll.LoadLibrary("XXX.dll")  
callback_type = CFUNCTYPE(None, POINTER(Data))
callback = callback_type(Data)
mydll.setCallBack(callback)

def dataResponse(data):
print data.index

class Data(ctypes.Structure):
_fields_ = [("index", c_int)]

最佳答案

您的结构看起来是正确的,但是如果您正在调用 Windows API,您的调用约定可能不正确(您使用的是 cdecl,但如果这是 Windows API 调用,则需要 stdcall)。

尝试将 mydll = cdll.LoadLibrary("XXX.dll") 替换为 mydll = WinDLL("XXX.dll")

您可能还需要提供使用 stdcall 而不是 cdecl 的回调函数。如果是,请将 CFUNCTYPE 切换为 WINFUNCTYPE。您调用的 API 应提供有关其预期内容的详细信息。

看看是否有帮助。

关于python ctypes,回调函数扩充类型是C++引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com