我正在將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