展开全部
题主,你基本操作没什么2113问题,有几个5261小地方要修改一下,修4102改如下:1653
你的源码:
PyObject* list = PyList_New(3);
for (size_t i = 0; i < 3; i++)
PyList_Append(list, Py_BuildValue("i", i));
PyEval_CallObject(pFunc, list);
--------------------------------------------------------------------------------------修改后,应该是这样
PyObject* pArgs = NULL;
PyObject* list = PyList_New(0); //3改成0
pArgs = PyTuple_New(1); //定义1个参数
for (size_t i = 0; i < 3; i++)
PyList_Append(list, Py_BuildValue("i", i)); //这样才能用Append,
PyTuple_SetItem(pArgs, 0, list); //将列表赋给参数
PyEval_CallObject(pFunc, list); //传入参数,调用函数
注意事项:PyList_New(0) 初始化0的时候,应该用Append初始化
PyList_New(3) 初始化3个时候,应该用SetItem初始化
如果用Append的话,会出现[NULL, NULL, NULL]的情况
我在给一个完整的:
Python :(hello.py)def TestList(nlist):
print(nlist)
return
一般参数都是已元组形式传入的Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
PyObject* pModule =NULL;
PyObject* pList = NULL;
PyObject* pFunc = NULL;
PyObject* pArgs = NULL;
pModule = PyImport_ImportModule("hello");
pFunc = PyObject_GetAttrString(pModule, "TestList");
pArgs = PyTuple_New(1);
pList = PyList_New(0);
for (int i = 0; i < 3; i++)
{
PyList_Append(pList, Py_BuildValue("i", i));
}
PyTuple_SetItem(pArgs, 0, pList);
pRet = PyEval_CallObject(pFunc, pArgs);
Py_Finalize();
最后输出的:[0, 1, 2]