C++ 调用python代码

   C++以及MFC调用python代码(对接)

  • C++调用python环境配置
  1. 找到python安装目录,找到安装目录下的include和libs文件。

图1  python的库的配置

  1. 将这两个文件拷贝到自己代码根目录下面。

图2  python环境配置

  1. 然后进行代码的配置,先拷贝一份python37.lib文件,命名为python37_d.lib。这样拷贝的话,python37_d.lib就是debug版本,python37.lib是release版本。

图3  python环境配置

  1. 环境的配置

配置属性---》包含目录---》include文件所在位置

配置属性---》引用目录---》libs文件夹所在位置

配置属性---》  库目录---》libs文件夹所在位置

图4  VC++目录

链接器---》输入---》附加依赖项   添加python37_d.lib

图5  附加依赖项

测试代码如下所示:

Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化

    Py_SetPythonHome(L"D:\\a");

    if (!Py_IsInitialized())

        MessageBox(_T("初始化失败!"), _T("警告"), MB_OK);

    PyRun_SimpleString("import sys");

    PyRun_SimpleString("sys.path.append('D://')");

    PyRun_SimpleString("sys.path.append('Dlls/')");

    PyRun_SimpleString("sys.path.append('os.getcwd()')");

    PyRun_SimpleString("sys.path.append('./')");

    PyRun_SimpleString("sys.path.append('C:\Users\10730\Desktop\TEST_PYTHON\x64\Debug')",NULL);

    PyRun_SimpleString("print(sys.path)");

    PyObject*ArgArray1 = PyTuple_New(0);

    PyObject *  pModule = PyImport_ImportModule("detect");       //文件

     if (!pModule){

         PyErr_Print();

         MessageBox(_T("Cannot find WrittennPython.py!"), _T("警告"), MB_OK);

         return;

     }

    PyObject * pFunc = NULL;

    pFunc = PyObject_GetAttrString(pModule, "inference");

    const char *r = "5.jpg";

    PyObject* args = PyTuple_New(1);

    PyTuple_SetItem(args, 0, Py_BuildValue("s", r));

    char* a;

    PyObject* pRet = PyEval_CallObject(pFunc, args);

    PyArg_Parse(pRet, "s", &a);//转换返回类型

    Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
  • MFC代码运行时遇到的问题

在MFC调用python代码时,调用第三方库会出现调用函数出错的问题。需要改动python里面的源文件。找到python中keras的安装路径中的backend文件夹(如D:\python\Lib\site-packages\keras\backend),然后打开load_backend,打开load_backend.py文件,把sys.stderr.write(‘Using TensorFlow backend.\n’)这句注释掉。

图6 修改python文件

  • C++多线程与python调用

C++多线程调用python时,当线程取得了python的解释器以后,主线程再次申请python解释器占有权失败,导致调用出错。(未解决)

 

附录

1、C++中调用python代码

博客地址:https://blog.csdn.net/i6223671/article/details/99832186

环境配置:包含文件、库文件、引用文件配置

链接器中的附加依赖项 添加python37_d.lib

(注意python37_d.lib是不存在的,需要将python37.lib复制然后重命名就OK)

 

2、MFC调用python代码出错

博客地址:https://blog.csdn.net/Jonh_/article/details/111028333

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值