在 我正在尝试用回调函数来设计类,它被传输到某个C库中。需要在不更改回调参数的情况下授予对此类对象的访问权限。怎么做?在
from ctypes import *
...
lib = CDLL('mylibname.so')
...
class A(object):
def __init__(self):
CALLBACK = CFUNCTYPE(c_uint32, c_void_p)
self.callback_func = CALLBACK(A.message_callback)
self.param = None
def message_callback(data):
... #here need access to self.param
return 0
def set_param(self, param):
self.param = param
...
a = A()
lib.lib_func(param1, param2, a.callback_func)
编辑: 我用包装器函数更改了类中的回调方法:
^{pr2}$它在python2中工作,但我仍然对python3有问题:
回溯(最近一次呼叫): “调用回调函数”中第260行中的文件“_ctypes/callbacks.c” TypeError:“LP\u struct”对象不可调用
以下是同一问题的链接:Weird bug?
只需定义
message_callback(self, data)
并使用self.callback_func = A.CALLBACK(self.message_callback)
。注意我使用了A.CALLBACK
。将其设置为类属性。为每个实例定义它是浪费时间。在例如:
C:
Python:
^{pr2}$演示:
相关问题 更多 >
编程相关推荐