一、环境设置
windows
VS2015
python的话用的是acaconda自带的python环境,不同版本的acaconda自带的python不同,我的是python3.6(这一步很重要,如果使用acaconda创建的虚拟环境的python,可能会不成功)
二、VS项目中设置
(1)首先在acaconda中找到include文件夹和libs文件夹,如图所示
然后右击C++项目,选择属性,点击VC++目录,然后在包含目录中添加include文件夹,在库目录中添加libs文件夹
(2)点击链接器,然后输入,附加依赖项,添加python36_d.lib的路径
因为配置为Debug,所以是添加python36_d.lib,而不是python36.lib。如果没有这个文件,直接复制python36.lib,然后命名为python36_d.lib即可。如图所示
(3)python代码
想要在C++代码中调用python中的vsdemo.py的max函数,首先python代码如图所示
1
2
3
4
5
|
def max (a,b): if a>b: return a else : return b |
C++代码如图所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <iostream> #include<python.h> #include"stdio.h" using namespace std; int main() { Py_Initialize(); //使用python之前,要调用Py_Initialize();这个函数进行初始化 if (!Py_IsInitialized()) { printf ( "初始化失败!" ); return 0; } PyRun_SimpleString( "import sys" ); PyRun_SimpleString( "sys.path.append('./')" ); //这一步很重要,修改Python路径 PyObject* pModule = NULL; //声明变量 PyObject* pFunc = NULL; // 声明变量 pModule = PyImport_ImportModule( "vsdemo" ); //这里是要调用的文件名vsdemo.py if (pModule == NULL) { cout << "没找到" << endl; } pFunc = PyObject_GetAttrString(pModule, "max" ); //这里是要调用的函数名max PyObject* pParams = Py_BuildValue( "(ss)" , "3" , "4" ); //两个字符串参数 char * result; PyObject* pRet = PyObject_CallObject(pFunc, pParams); //调用函数 pRet是得到的结果 int res = 0; PyArg_Parse(pRet, "s" , &result); //转换结果的返回类型 cout << "res:" << result << endl; //输出结果 system ( "pause" ); Py_Finalize(); //调用Py_Finalize,这个根Py_Initialize相对应的。 return 0; } |
同时需要把python代码,即vsdemo.py文件,放到c++项目文件中,然后再运行
三、可能会出现的问题
(1)可能会出现找不到python36.dll的错误,可以从acaconda中找到该文件,复制到c++项目文件中即可,如图所示
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/yangtuanzi1118/article/details/122134428