題主,妳基本操作沒什麽問題,有幾個小地方要修改壹下,修改如下:
妳的源碼:
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]