写MFC遇到的各种大大小小坑(二)

搭建环境:VS2013(mfc120生成器)+python3.6

这是一个记录了遇到的大大小小的坑,真的是十个里面九个是坑!!这里是用来记录我遇到的坑的,当然里面还有许多未解之谜,我自己也不明白。

python调用方面:

1.工程环境设置:

由于我的电脑是64位的,我安装的python也是64位的,所以需要把我的工程的所有生成编程64位的,不然不管怎么设置工程属性都不能编译成功,会显示找不到python.h文件。

另外需要设置一下工程的一些属性和连接地方:

注意,这里的python36_d.dll在python安装路径下面的libs里面,如果你没有这个文件(一般来说你是没有的),你需要把python36.dll复制一下然后重命名为python36_d.dll。这样这个文件就有了。

然后,在你的.c文件加入代码 #include "python.h"

如果你的工程没有显示找不到python.h,那么说明你的工程环境已经设置好了。

2.代码添加:

           全部的代码请参考网上的,很多的,一搜一大把。所以我就不写了,这里就写我遇到的坑。

1.建议加上代码:

PyRun_SimpleString("import os,sys");
           PyRun_SimpleString("sys.path.append('python代码的路径')");

来指向你的python文件,使得路径清楚。不然可能会找不到文件

2.PyObject* pModule = PyImport_ImportModule("cap");这个函数是用来读代码文件的,cap是我的代码的文件名,即我的代码文件为cap.py。所以注意,这里的.py不能加进去。

3.建议加上 try,catch (CException& e)用来捕捉代码运行错误。免得不知道哪里出错了。

4.python的代码运行时间过长的建议在开头和最后加上弹出框用来显示是否完成了。不然你很有可能以为好了,然后去按别的按键了,这个时候,你的工程很可能就gg了。

5.记得在调用完之后加上Py_Finalize();关闭python。

6.你的py文件读取文件的时候最好使用绝对路径,不然你很可能找不到文件,因为你的vs工程和py文件可能不在一个路径下面,所以最好替换掉os.path.join('xxxxx','xxxx.xxx')这种代码,使用绝对路径进行读取。

3.带有keras的py:

keras是个很神奇的坑,别的py文件都能运行,到了import keras的py文件的时候就会出现一个很神奇的问题。

pFunc = PyObject_GetAttrString(pModule, "xxx");这行代码它无法找到py文件中的function,也就是说pFunc一直都是NULL,明明文件都能找到,但是函数就是不能找到。

解决方法是定位到python路径->site-packages->keras->backend->__init__.py文件,注释掉一行代码:

#sys.stderr.write('Using Tensorflow backend\n')

这行代码。我也不知道为什么,有知道的小朋友希望能私戳我,或者给我留言。

4.基本上只有傻子才会遇到的坑!!!:

如题所言,只有傻子和幸运值E-------------的人才会遇到的坑。那就是你的py文件名为test!!!也就是你的代码文件为test.py。这种作死的名字。

原因:因为python自带test模组且优先级高于用户。

总而言之,就是你的文件名不能是test.py。不然你可能cmd命令下它跑的好好的,但是放到mfc下就是找不到这个文件。

另外,所有的py文件代码必须是可以执行的,也就是你在cmd命令下面跑过,没有任何error的,不然mfc的exe会直接血崩!!!

总结完了,希望所有小朋友混合编程愉快!!!哈哈哈哈

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值