我基本上试图像下面的问题那样做,但是我在调用PyObject_Print
时遇到运行时错误抱怨“toupper()0x776e0226”中的错误
Python C API: Using 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。
答案 0 :(得分:0)
实际上这很好用。但是我在python必须已经构建的目录中有一个.pyd文件(并且eclipse正在向我隐藏),这个文件来自没有定义函数的较旧的python脚本,导致问题。
这是我认为问题可能是.pyd文件的地方。
python NameError: name '<anything>' is not defined (but it is!)