Я работаю над внедрением 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 Termination.К сожалению, поскольку я создаю PDF-документы, NUL не только разрешены, но и почти гарантированы.Может кто-нибудь сказать мне, как я возвращаю String Data из Python обратно в C ++, не заканчиваясь на первом NUL, с которым он сталкивается?
В качестве дополнительного вопроса, этот код может вызываться несколько раз как часть фоновой службы, которая создаетPDF документы из входящих данных печати.Первый раз, когда этот код вызывается, он работает как положено.Любые последующие вызовы не будут выполняться по указанной линии сразу после Py_Initialize()
.Помощь в том, как определить, что там происходит, также будет очень полезна.Заранее спасибо,