前几天的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();