我正在使用Python C API来调用方法。目前我正在使用PyObject_CallMethodObjArgs
来执行此操作。这是一个可变函数:
PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)
当在编译时知道参数的数量时,这是绝对正常的。但是,我有一个场景,其中参数的数量直到运行时才知道,它们作为数组提供。
从本质上讲,我的问题与此问题完全相同:How can I pass an array as parameters to a vararg function?
那里接受的答案告诉我,我的问题没有解决办法。
这个障碍是否有办法解决?如果我无法使用PyObject_CallMethodObjArgs
解决问题,那么Python C API中是否有可以满足我需求的替代函数?
例如,PyObject_Call
接受参数作为Python序列对象。是否可以使用此功能,或具有类似界面的功能?
答案 0 :(得分:4)
我不确定我是否完全错了,但AFAICT应该可以
答案 1 :(得分:0)
可能的方法是使用libffi,也许通过ctypes Python库。它知道你的ABI和calling conventions(因此在汇编程序中部分编码,对于许多流行的实现而言)并且使你能够调用任意签名和任意arity的任意函数。
请注意,便携式和标准no purely standard way of doing that中有C11(不使用某些外部库,但libffi
...)(请参阅n1570)。< / p>
BTW,libffi
可以在任何C程序中使用。并且ctypes
可以在任何Python程序中使用。
Python Embedding and extending Python章节解释了如何从C调用Python,或者从Python调用C语言。