我不知道我在这里问的是不是一个合适的方法(找不到任何类似的问题),但还是这样。在
我需要用自定义参数和ctypes参数一起启动回调函数。在
函数
def initMessageCallback(myData):
callback = ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_long) # return type and output parameter
lib.SetMessageCallback.restype = ctypes.c_bool
lib.SetMessageCallback(callback(callbackFunc))
回调函数
我可以访问SetMessageCallback
返回的参数,但如何在initMessageCallback
期间传递myData
,这样我就可以在callbackFunc
内部访问它而不使它成为全局变量?在
有几种方法可以做到这一点。回调可以是类中的方法,可以访问实例化类的实例数据,也可以将数据附加到回调本身。下面是后者的一个示例和一些回调代码示例:
测试c
测试.py
^{pr2}$输出
关于示例代码的注释。
callback(callbackFunc)
被创建并传递给lib.SetMessageCallback()
,但由于该行执行后不存在引用,因此回调被销毁。当你尝试使用回调时,这会使你的系统崩溃。对回调函数使用decorator(@CALLBACK)就像我上面所做的那样,相当于my_callback = CALLBACK(my_callback)
。函数名在全局级别,不会超出范围。所以在生成回调时请记住这一点。将它们存储在一个变量中,并确保它在作用域内,直到您处理完为止。在相关问题 更多 >
编程相关推荐