这是场景:我正在使用 ctypes 将 C DLL 加载到 Python 程序中。我想注册一个回调,以便 DLL 中的代码可以调用 Python 中的函数。
这一切都很好,直到我想让函数成为可变参数。例如,假设我想在 Python 中实现“printf”(为了参数,我也会让它返回一个整数):
def printf(format, *args):
(...)
return 0
我正在使用 ctypes 中的 CFUNCTYPE 工厂创建回调函数指针:
callback_type = CFUNCTYPE(c_int, c_wchar_p)
当然,由于我只指定了一个输入参数(格式字符串为 Unicode char 数组),因此回调有效但*args
为空。
那么,有什么方法可以使这项工作与 ctypes 一起工作,还是我需要重写我的 C 代码以不需要可变参数回调函数?