小编mga*_*rey的帖子

Python Ctypes 注册回调函数

我使用 Python 和 ctypes 遇到了一些非常奇怪的事情。我正在使用Python 3.4.3。首先,介绍一下该项目的一些背景:

我已经从 C 代码编译了一个自定义 dll。我正在使用 ctypes 与 dll 进行交互。C 库与一些定制硬件连接。有时,硬件会生成中断并将其传递给计算机上的 C 库。在C API中,有一个带有原型的函数void register_callback(int addr, void (*callback)(void))。我有一个回调函数指针数组,它们被初始化为 NULL。当这个函数被调用时,索引addr处的回调函数指针被设置为callback,如下所示callbacks[addr] = callback;:

当用户使用 Python 编程时,他们会实例化来自对不同硬件部件(例如按钮或 RGB LED)进行建模的类的对象。然后,他们可以编写自定义回调函数并进行调用button.register_callback(func)(当然,假设他们有一个名为“button”的 Button 对象),该函数会调用 C 库中的 register_callback 函数。现在,当按下按钮并生成中断时,C 库将调用适当的回调函数(即callbacks[addr]();)。

现在,奇怪的是:

在 Python 中,我第一次尝试使用 Python 中的 register_callback 方法,如下所示:

class Obj:
    def __init__(self, name):
        # Initialize stuff

    def register_callback(self, func):
        CB_T = ctypes.CFUNCTYPE(None)
        cb_ptr = CB_T(func)
        host_api.register_callback(self.addr, cb_ptr) # host_api is the loaded dll
Run Code Online (Sandbox Code Playgroud)

主要是:

def …
Run Code Online (Sandbox Code Playgroud)

python ctypes callback

2
推荐指数
1
解决办法
2603
查看次数

标签 统计

callback ×1

ctypes ×1

python ×1