Callbacks with ctypes (How to call a python function from C)
import ctypes as c
@c.CFUNCTYPE(None, c.c_int, c.c_int)
def callback(a, b):
print("foo has finished its job (%d, %d)" % (a.value, b.value))
dll.foo(callback, a, b) # assuming a,b are ints
If you need stdcall
calling conventions, use WINFUNCTYPE
instead.
Note: if foo
may store the callback to be called at a later time then make sure that Python callback is alive (it is enough if it is defined at the global level using the decorator as shown in the example -- modules are essentially immortal in Python unless you try to remove them explicitly).
Use CFUNCTYPE
to create a callback type:
c_callback = CFUNCTYPE(None, c_int, c_int)(callback)
dll.foo(c_callback, a, b)