下面是一个场景:我使用ctypes将一个C DLL加载到Python程序中。我想注册一个回调,以便DLL中的代码可以调用Python中的函数。在
这一切都很好,直到我想要变函数。例如,假设我想在Python中实现“printf”(为了参数起见,我还让它返回一个整数):
def printf(format, *args):
(...)
return 0
我正在使用ctypes中的CFUNCTYPE工厂创建回调函数指针:
^{pr2}$当然,由于我只指定了一个输入参数(格式字符串作为Unicode字符数组),回调可以工作,但是*args
是空的。在
那么,有没有什么方法可以用ctypes来实现呢,或者我需要重写C代码来不需要变量回调函数吗?在
不,底层libffi不支持它。您确实需要编写定制的C代码。在
(Fwiw,CFFI是一个ctypes替代品。同样基于libffi,它也有同样的局限性——但至少它使编写定制的C代码片段来进行接口变得很容易。)
相关问题 更多 >
编程相关推荐