Sho*_*kaa 7 c python python-embedding python-c-api
我根据文档使用嵌入式Python for C时遇到问题- 每当我尝试使用导入的模块时,我得到一个:
PythonIncl.exe中0x1e089e85处的未处理异常:0xC0000005:访问冲突读取位置0x00000004.
该PyObject_GetAttrString()方法中出现错误,文档没有太大帮助.我也尝试过使用IBM的一个示例中的教程,但总是得到相同的访问冲突.
以下是我似乎无法开始工作的其中一个教程的示例代码,这里有什么问题?
C代码(在一个主文件中):
#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;
}
Run Code Online (Sandbox Code Playgroud)
Python代码(在一个名为reverse.py的文件中,相同的文件夹):
def rstring(s):
i = len(s)-1
t = ''
while(i > -1):
t += s[i]
i -= 1
return t
Run Code Online (Sandbox Code Playgroud)
我正在使用MSVS2008,Python 2.7运行XP机器
一点上下文:我试图在一个相当大的C程序中嵌入一个使用OpenOPC的小python脚本,并希望在两者之间传输数据.但是,我已经通过基本示例进行了概念验证测试.
phi*_*hag 16
检查PyImport_ImportModule呼叫结果:失败并返回NULL.这是因为默认情况下,当前目录不在搜索路径中.加
PySys_SetPath("."); // before ..
mymod = PyImport_ImportModule("reverse");
Run Code Online (Sandbox Code Playgroud)
将当前目录添加到模块搜索路径并使您的示例正常工作.