我希望能够从回调函数中调用self。
class MyClass():
def myMethod(self):
def myCallback(p1):
print "Callback called!"
# here I want to do something with self!
CALLBACK_x = ctypes.WINFUNCTYPE(ctypes.c_void_p, ctypes.c_uint32)
somedll.setCallback(CALLBACK_x(cbFileRefDone), 0)
不使用回调函数中的DWORD参数。
我如何访问自己?
答案 0 :(得分:3)
self
应该已在myCallback
中提供。由于它是在函数内创建的,因此它可以访问封闭函数的变量,包括self
。这些变量实际上与内部函数一起存储在所谓的闭包中,因此即使在封闭函数返回后它们仍然存在。这是一个最小的例子:
class C(object):
def f(self):
def g():
print self
return g
c = C()
g = c.f()
g()
>>> <__main__.C object at 0x02AED1F0>
答案 1 :(得分:0)
class MyClass():
def myMethod(self):
def myCallback(p1):
self = ctypes.cast(p1, ctypes.py_object).value
print "Callback called!"
# here I want to do something with self!
CALLBACK_x = ctypes.WINFUNCTYPE(ctypes.c_void_p, ctypes.c_uint32)
somedll.setCallback(CALLBACK_x(cbFileRefDone), ctypes.py_object(self))
答案 2 :(得分:0)
您的回调函数似乎是带有原型的C函数:
void __stdcall Callback(uint32)
您无需执行任何特殊操作即可访问self
。 ctypes
魔法会为你安排。你需要的代码是这样的:
class MyClass():
def myMethod(self):
def myCallback(p1):
print "Callback called!"
# self is available here
callback = ctypes.WINFUNCTYPE(ctypes.c_void_p,
ctypes.c_uint32)(myCallback)
somedll.setCallback(callback, 0)