前几天的BCB调用Python,没有直接在C++里面调用Python函数,只是简单的使用了PyRun_SimpleString()这个函数进行指定字符串的执行。这种调用,对于没有输出结果,或者是输出结果在文件之类时还是可以使用的,但是通常情况下,我们调用函数是需要返回一个结果给被调用者的。针对这种情况,使用解释字串方式可行性不大了(可以实现,使用输出流重定向,但是处理起来复杂),只能是调用函数,然后接受函数的返回值。
这种调用也是比较简单的(因为我只要求返回字串就可以了:)),首先使用PyImport_ImportModule初始化你要调用的模块(一般指文件名),然后使用PyObject_CallMethod调用你的Python函数,当然了,调用函数的参数是需要设置的。
参考代码:
-----------------------------------
AnsiString ScriptPath = ExtractFilePath(Application->ExeName)+"script";
AnsiString PyStr;
PyObject *pName, *pOs, *pArg, *pResult, *pCall;
Py_Initialize();
InitLogger();
pOs = PyImport_ImportModule("os.path");
PyObject_CallMethod(pOs, "join", "(s)", ScriptPath.c_str());
pCall = PyImport_ImportModule("BOMandXY");
pResult = PyObject_CallMethod(pCall, "ReadBOM", "(s)", FileName.c_str());
ShowMessage(PyString_AsString(pResult));
Py_Finalize();