我基本上试图做与以下问题相同的事情,但我在调用PyObject_Print
“toupper() at 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 函数调用中错过/做错了什么。请注意,我不能通过 python API“直接”调用函数 setCurrentFileDir,我必须使用 eval。