我想你是知道
这个?
是否可以从C调用我的Python代码?
答:是的,很容易。请遵循Cython来源分发中的Demos / callback /中的示例
因此,知道您可以卸载主要功能,让我们采取另一种方法。我写了几个愚蠢的函数来测试这一点:
#include <stdio.h>void fn1(void) { puts("Called function 1");}void fn2(void) { puts("Called function 2");}然后,执行回调的函数
typedef void (*callback)();void mainfunction(void *F) { ((callback)F)();}可以直接从Python传递:
>>> from ctypes import cdll>>> lib = cdll.LoadLibrary('./lib.so')>>> main = cdll.LoadLibrary('./main.so')>>> main.mainfunction(lib.fn1)Called function 1>>> main.mainfunction(lib.fn2)Called function 2现在,让我们包装一个Python函数:
>>> from ctypes import CFUNCTYPE>>> def pyfn():... print "Called the Python function"... >>> CWRAPPER = CFUNCTYPE(None)>>> wrapped_py_func = CWRAPPER(pyfn)>>> main.mainfunction(wrapped_py_func)Called the Python function



