函数原型:PyRun_SimpleFile(FILE *fp, const char *filename)
官方解释:在Windows上,fp应该以二进制模式打开(例如fopen(文件名,“rb”
)。 否则,Python 可能无法正确处理 LF 行结尾的脚本文件。
事情经过:
一开始使用的易语言,打开文件 传递过去失败。包括尝试使用msvcrt.dll 和crtdll.dll 这些标准C语言库中导出的fopen函数,
一直都不行。后来决定使用C++来封装。易语言很多数据类型很难实现。自己也不想浪费太多时间,毕竟是要站在巨人的肩膀上嘛。
因为之前的失败,所以我上来就直接百度了。竟然有不少大佬也遇到了相同的问题,看了几个博客。结果是解决了。使用的_Py_fopen_obj。
后来仔细看了一下他们之间的区别,想到了官方文档中要求的是二进制方式打开。而大佬们博客的代码写的都是r+或者其他的,正常是rb才对。于是我就按照官方的方式试了一下。结果运行通过了。。。着实是为这几位大佬的粗心捏一把汗啊!
解决方案:
char szFile[] = "1.py";
FILE* fp = fopen(szFile, "rb");
PyRun_SimpleFile(fp, "1.py");