我在我的脚本中创建 CFUNCTYPE 对象并将它们作为回调传递给 c。如果我将它们设为本地,它们会立即被销毁,并且我得到访问 violaton 错误尝试使用 gc.disable(),它没有帮助。今天我制作全局列表并在需要时放置/删除 FUNCTYPE 对象。有更好的解决方案吗?
问问题
257 次
2 回答
1
最简单的方法是将 CFUNCTYPE 对象附加到模块或类。我发现拥有一个 Python 包装模块很有用——本质上是一个单独的文件,它将所有内容都保存在一个命名空间中的 ctypes 级别。
您可以根据需要从那里添加和删除回调。
于 2012-10-21T09:57:31.367 回答
1
用作CFUNCTYPE
装饰器。这会修改模块命名空间中的回调函数并保留其引用:
CALLBACK = CFUNCTYPE(c_int)
@CALLBACK
def callback():
return 5
my_ctypes_function(callback)
与以下在行完成时破坏 CALLBACK 对象的情况相反:
my_ctypes_function(CALLBACK(callback))
于 2012-10-21T14:56:38.560 回答