1

我在我的脚本中创建 CFUNCTYPE 对象并将它们作为回调传递给 c。如果我将它们设为本地,它们会立即被销毁,并且我得到访问 violaton 错误尝试使用 gc.disable(),它没有帮助。今天我制作全局列表并在需要时放置/删除 FUNCTYPE 对象。有更好的解决方案吗?

4

2 回答 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 回答