Я в основном пытаюсь сделать то же, что и следующий вопрос, но я получаю ошибки во время выполнения при вызове PyObject_Print
жалуется на ошибку в «toupper () в 0x776e0226»
Python C API: использование PyEval_EvalCode
Мой код:
int callExecFunction(const char* evalStr)
{
PyCodeObject* code = (PyCodeObject*)Py_CompileString(evalStr, "pyscript", Py_eval_input);
PyObject* global_dict = PyModule_GetDict(pModule);
PyObject* local_dict = PyDict_New();
PyObject* obj = PyEval_EvalCode(code, global_dict, local_dict);
PyObject* result = PyObject_Str(obj);
PyObject_Print(result, stdout, 0);
}
evalStr является "setCurrentFileDir()"
и pModule был инициализирован ранее из скрипта без ошибок и работал как этот код: http://docs.python.org/2/extending/embedding.html#pure-embedding.
А внутри загруженного модуля есть функция:
def setCurrentFileDir():
print "setCurrentFileDir"return "5"
Что я пропустил / сделал неправильно в вызове функции eval. Обратите внимание, что я не могу вызвать функцию setCurrentFileDir «напрямую» через API Python, я должен использовать eval.
На самом деле это работает нормально. Однако у меня был файл .pyd в каталоге, который Python должен был построить (а eclipse скрывал от меня) из более раннего запуска скрипта Python, в котором не была определена функция, что вызвало проблему.
Здесь я понял, что проблема может быть в .pyd файле.
Python NameError: name ‘<что-нибудь>’не определено (но это так!)
Других решений пока нет …