我在使用嵌入式Python for C时遇到问题Documentation - 每当我尝试使用导入的模块时,我都会得到:
PythonIncl.exe中0x1e089e85处的未处理异常:0xC0000005: 访问冲突读取位置0x00000004。
PyObject_GetAttrString()
方法出错,文档帮助不大。我也尝试过使用IBM的Example中的教程,但总是得到相同的访问冲突。
以下是其中一个我似乎无法开始工作的教程的示例代码,这里有什么问题?
C-Code(在一个主文件中):
#include <Python.h>
int main()
{
PyObject *strret, *mymod, *strfunc, *strargs;
char *cstrret;
Py_Initialize();
mymod = PyImport_ImportModule("reverse");
strfunc = PyObject_GetAttrString(mymod, "rstring");
strargs = Py_BuildValue("(s)", "Hello World");
strret = PyEval_CallObject(strfunc, strargs);
PyArg_Parse(strret, "s", &cstrret);
printf("Reversed string: %s\n", cstrret);
Py_Finalize();
return 0;
}
Python代码(在名为reverse.py的文件中,相同的文件夹中):
def rstring(s):
i = len(s)-1
t = ''
while(i > -1):
t += s[i]
i -= 1
return t
我正在使用MSVS2008,Python 2.7
运行XP机器一些上下文:我试图在一个相当大的C程序中嵌入一个使用OpenOPC的小python脚本,并希望在两者之间传输数据。但是,我已经在基于概念的概念验证测试中失败了。
答案 0 :(得分:16)
检查PyImport_ImportModule
来电的结果:失败并返回NULL
。这是因为默认情况下,当前目录不在搜索路径中。添加
PySys_SetPath("."); // before ..
mymod = PyImport_ImportModule("reverse");
将当前目录添加到模块搜索路径并使您的示例正常工作。
答案 1 :(得分:2)
您正在进行操作而不检查错误,因此您的代码以这种方式失败并不会让您感到震惊。根据您的描述,听起来mymod
是NULL
,这与导入失败一致。导入失败的一个可能原因是您发布的reverse.py
语法错误。