C++调用Python的一些大坑

具体方法网上好多,在此不赘述,只记录踩过的坑

1,C++调用纯Python脚本的坑

PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('这里写.py文件所在文件夹的绝对路径')");
//注意是所在文件夹!!!

//变量声明,所有跟Python程序交互的变量都是PyObject*
PyObject* pModule = NULL;
PyObject* pDict = NULL;
PyObject* pFunc = NULL;
PyObject* pResult = NULL;

//加载.py文件
pModule = PyImport_ImportModule("这里写要用的Python脚本文件名,不带.py");

//加载函数
pFunc = PyObject_GetAttrString(pModule, "这里写要加载的函数名,不带括号和参数列表");

//调用函数
PyObject* args = Py_BuildValue("ii", a, b);//把参数转换为Python能看懂的格式
//详细说明参照文章1
pResult = PyEval_CallObject(pFunc, 这里写参数列表,无参数函数写NULL);
//pResult是函数返回值,没有可以直接PyEval_CallObject(pFunc, args);

//返回值转换为C++能看懂的格式
int res = 0;
PyArg_Parse(pResult, "i", &res);//res就是最终返回值

参考文章:https://blog.csdn.net/qq_38275373/article/details/91367372?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162823701616780271577730%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162823701616780271577730&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-91367372.pc_search_result_control_group&utm_term=c%2B%2B%E8%B0%83%E7%94%A8python&spm=1018.2226.3001.4187

2,C++调用import tensorflow的Python脚本

1里面的情况只适用于不带tensorflow的脚本,因为tensorflow涉及到对GPU的调用(根据报错推断的不一定对)

按照1的方法调用tensorflow的话PyImport_ImportModule()返回NULL,解决方法如下图

int argc = 1;
wchar_t* argv[] = { L" " };
PySys_SetArgv(argc, argv);
//pModule = PyImport_ImportModule("callFunction");

第二行可能会报

C2440    “初始化”: 无法从“const wchar_t [2]”转换为“wchar_t *”

解决方法:解决方案资源管理器->C/C++->语言->符合模式,改成否

重新运行显示调用成功

大坑应该不止这俩,边学边发

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值