您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Cython中将函数指针传递给外部程序

如何在Cython中将函数指针传递给外部程序

我想你是知道 这个

是否可以从C调用我的Python代码

答:是的,很容易。请遵循Cython来源分发中的Demos / callback /中的示例

因此,知道您可以卸载主要功能,让我们采取另一种方法。我写了几个愚蠢的函数来测试这一点:

/* lib.c -> lib.so */
#include <stdio.h>

void fn1(void) {
        puts("Called function 1");
}

void fn2(void) {
        puts("Called function 2");
}

然后,执行回调的函数

/* main.c -> main.so */

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
其他 2022/1/1 18:39:36 有466人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶