Is it possible to call a Python function from a C dll function?
We consider this C function:
void foo( void (*functionPtr)(int,int) , i
Use CFUNCTYPE to create a callback type:
c_callback = CFUNCTYPE(None, c_int, c_int)(callback)
dll.foo(c_callback, a, b)
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).