上一篇博客写了怎么建立Python和C/C++之间的通信,但是上次测试传入的是一个整数数据,而在实际工程中用到的是传入一个文件的地址。这里需要用到PyUnicode_DecodeFSDefaultAndSize,具体的测试代码如下
int great_from_python(const char *filename) {
int res;
PyObject *pModule, *pFunc;
PyObject *pArgs, *pValue;
/*导入great模块,注意要将great.py放入工程文件夹中的x64文件夹下的Release文件夹下*/
pModule = PyImport_ImportModule("great");
/*在great.py中有一个great_fun函数*/
pFunc = PyObject_GetAttrString(pModule, "great_fun");
/*创建一个python类型的变量,这里均可以创建成tuple数据类型*/
pArgs = PyTuple_New(1);
/*30是开辟的字符串是路径长度,若字符串较长需将其变大*/
PyTuple_SetItem(pArgs, 0, PyUnicode_DecodeFSDefaultAndSize(filename, 30));
//PyObject *pReturn = NULL;
//pReturn = PyEval_CallObject(pFunc, pArgs);
pValue = PyObject_CallObject(pFunc, pArgs);
//PyArg_Parse(pReturn, "i", &res);
res = PyLong_AsLong(pValue);
return res;
}
int main(int argc, char *argv[]) {
Py_Initialize();
printf("%d", great_from_python("D:\\3D 2D Reg\\Intial.png"));
Py_Finalize;
system("pause");
return 0;
}