Python C扩展通过引用传递参数
我正在尝试为一个函数(libFunc)写一个Python的C语言封装,这个函数的原型是
libFunc(char**, int*, char*, int)
我该如何使用PyArg_ParseTuple来设置函数调用的参数呢?这是我目前的代码
#include <Python.h>
PyObject* libFunc_py(PyObject* self, PyObject* args)
{
char* input;
char** output;
int inputlen;
int* outputlen;
PyArg_ParseTuple(args, "sisi" , output, outputlen, &input, &inputlen);
int ret = libFunc(output, outlen, input, inputlen);
return Py_BuildValue("i", ret);
}
我可以用ctypes通过byref来做到这一点。
1 个回答
0
我最后是这样做的
#include <Python.h>
PyObject* libFunc_py(PyObject* self, PyObject* args)
{
char* input;
char* output;
int inputlen;
int outputlen;
PyArg_ParseTuple(args, "s#" , &input, &inputlen);
int ret = libFunc(&output, &outlen, input, inputlen);
if (ret !=0)
{
Py_ErrSetString(PyExc_RunTimeError, "ErrorMessage");
return NULL;
}
PyObject* retStr = Py_BuildValue("s#", output,outputlen);
if(output)
free(output)
return retStr;
}