我可以用ctypes为一个可变的Python函数创建一个原型,以便DLL可以调用这个函数作为回调函数吗?

2024-05-10 01:24:32 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个场景:我使用ctypes将一个C DLL加载到Python程序中。我想注册一个回调,以便DLL中的代码可以调用Python中的函数。在

这一切都很好,直到我想要变函数。例如,假设我想在Python中实现“printf”(为了参数起见,我还让它返回一个整数):

def printf(format, *args):
    (...)
    return 0

我正在使用ctypes中的CFUNCTYPE工厂创建回调函数指针:

^{pr2}$

当然,由于我只指定了一个输入参数(格式字符串作为Unicode字符数组),回调可以工作,但是*args是空的。在

那么,有没有什么方法可以用ctypes来实现呢,或者我需要重写C代码来不需要变量回调函数吗?在


Tags: 函数代码程序format参数return工厂def
1条回答
网友
1楼 · 发布于 2024-05-10 01:24:32

不,底层libffi不支持它。您确实需要编写定制的C代码。在

(Fwiw,CFFI是一个ctypes替代品。同样基于libffi,它也有同样的局限性——但至少它使编写定制的C代码片段来进行接口变得很容易。)

相关问题 更多 >