我正在将Python 2.6嵌入到现有的C++应用程序中。到目前为止,我已经链接了库,并且能够成功初始化Python解释器,并且还可以将数据传输到Python。我无法检索它,并希望有人能引导我正确的方向。我与这方面的工作:C++和嵌入式Python - NUL终止字符串
Py_Initialize();
pModule = PyImport_ImportModule("cBuffers"); // This crashes after 1st call.
pDict = PyModule_GetDict(pModule);
pClass = PyDict_GetItemString(pDict, "rf_pdf");
pMeth = PyString_FromString("main");
if (PyCallable_Check(pClass) && PyClass_Check(pClass)) {
pInstance = PyInstance_New(pClass, NULL, NULL);
pOutput = PyObject_CallMethodObjArgs(pInstance, pMeth, pOpts, pInput, NULL);
}
if (pOutput != NULL) {
string pPdf = PyString_AsString(pOutput);
Py_DECREF(pOutput);
} else {
PyErr_Print();
}
// Cleanup
Py_DECREF(pModule);
Py_DECREF(pModule); // Has an extra reference, not positive why.
Py_DECREF(pMeth);
Py_DECREF(pInstance);
Py_DECREF(pOpts);
Py_DECREF(pInput);
Py_Finalize();
pOpts和pInput都产生使用PyString_FromString
前面的代码。我遇到的麻烦是,当我尝试使用PyString_AsString检索输出时,返回值是NUL Terminated。不幸的是,因为我正在生成PDF文档,所以NUL不仅被允许,它们几乎可以保证。任何人都可以告诉我如何将Python数据库中的字符串数据返回到C++,而不会在第一次遇到NUL时结束?
作为一个附加问题,此代码可作为从传入打印数据创建PDF文档的后台服务的一部分多次调用。第一次调用这个代码时,它可以正常工作。在Py_Initialize()
之后的任何后续呼叫都会失败。有关如何确定发生的事情的帮助也将得到最多赞赏。在此先感谢,
NULL!= ASCII NUL。 NULL是一个空指针,NUL是你的字符串终结符。最好不要混淆两者! – LukeN 2010-10-08 17:47:13
@LukeN - 更新并感谢指出这两者是截然不同的,但问题仍然是从Python返回的字符串包含它们,我需要知道如何解决它。 – 2010-10-08 17:58:08