[OT] pass a C callback function to a cythom module via python
I have the following: - A library of C function which is compiled into a dll - A cython module with a function that expects as a parameter a C callback function. My problem is how to make a python script to pass directly the address of a C function from the dll to the cython function. example: -- C code --- float mul(float a, float b) { return a*b; } -- cython module -- ctypedef float c2f(float, float) def call_c(c2f fun, float x, float y): return fun(x, y) ---------------------- I can use ctypes as the follows, but the call goes through a python wrapper from ctypes import * import cython_module dll = cdll.LoadLibrary('./C_modile.so') mul = dll.mul mul.argtypes = [c_float, c_float] mul.restype = c_float cython_module.call_c(mul, c_float(3), c_float(2)) I found a work around by adding the following line to the C code: void* mulp = mul So the following line in the python module provides the address of the mul function: mull_addr = c_void_p.in_dll(dll, "mul") I am wondering if there is a friendly and simple(r) solution. Nadav.
participants (1)
-
Nadav Horesh