我正在将 Python 2.6 嵌入到现有的 c++ 应用程序中。到目前为止,我已经链接了库,并且能够成功初始化 Python 解释器,还可以将数据传输到 Python。我在检索它时遇到了麻烦,希望有人能引导我正确的方向。我正在处理这个:
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 终止。不幸的是,因为我正在生成 PDF 文档,所以 NUL 不仅是允许的,而且几乎可以保证。谁能告诉我如何将字符串数据从 Python 返回到 C++ 而不会在它遇到的第一个 NUL 处结束?
作为一个附加问题,此代码可以作为后台服务的一部分被多次调用,该后台服务从传入的打印数据创建 PDF 文档。第一次调用此代码时,它按预期工作。任何后续调用都在 . 之后的指示行失败Py_Initialize()
。关于如何确定那里发生了什么的帮助也将不胜感激。提前致谢,