创建ctypes绑定到具有可变参数列表的C函数

4 投票
1 回答
2085 浏览
提问于 2025-04-16 18:10

假设我有一个C语言的函数,它可以接收可变数量的参数:

int some_func(int arg1 , ... );

从Python中使用ctypes调用这个函数是否可能(简单)?

更新:

我按照cedric的建议实现了,结果效果很好:

libc = ctypes.CDLL( "/lib64/libc.so.6" , ctypes.RTLD_GLOBAL )
printf = getattr( libc , "printf")
printf("String1:%s int:%d String2:%s double:%lg\n" , "Hello" , 10 , "World" , ctypes.c_double( 3.1415 ))

唯一的小麻烦是ctypes.c_double()这个函数。所以,总的来说,这比我想象的要简单;不过我想,使用可变参数时出错的可能性还是存在的。

1 个回答

2

假设你可以使用libc的printf函数,这其实是一个很好的使用可变参数(va_args)的例子。我觉得你可以用这种方法来绑定任何函数。

撰写回答