vc调用python

首先下载python的开发包,到百度上搜pyhon msi下载,会有相关下载链接,比如http://download.csdn.net/download/w277608109/8299309。

不能下exe的执行程序,那里面没有相关的头文件,比如pyhon.h。

pyhon官网上也有这个msi的安装包,但因为服务器在国外,网速十分慢,且这个官网的界面经常会变,有时候会找不到msi的文件。所以还是在百度上搜索msi文件下载就好了,缺点就是,有时找不到最新的msi包。

下载后,安装,一路next,然后配置环境变量。

我用的开发平台是vs2013,新建一个控制台程序,

载入lib:#pragma comment(lib,"C:\\Python34\\libs\\python34.lib"),但在debug下编译,会报出找不到python34_d.lib的错误,这个要改“pyconfig.h“中的配置:

查找 if defined(_DEBUG),把下面那句改成 pragma comment(lib,"python34.lib")即可。

继续编译,会报:

无法解析的外部符号 __imp___Py_NegativeRefcount,该符号在函数 "xxx中被引用”

无法解析的外部符号__imp___Py_RefTotal,该符号在函数 "xxx中被引用”

这两个错误。这两个函数应该是在python34_d.lib中的。我们在release模式下编译就没有问题。

写个测试的demo,写个测试的函数,如下,调用的是含有python第三方库(requests)的代码

int iCallPythonModule(){
// 初始化Python
//在使用Python系统前,必须使用Py_Initialize对其
//进行初始化。它会载入Python的内建模块并添加系统路
//径到模块搜索路径中。这个函数没有返回值,检查系统
//是否初始化成功需要使用Py_IsInitialized。
int iRet = -1;
do 
{

Py_Initialize();


// 检查初始化是否成功
if (!Py_IsInitialized())
{
return -1;
}
PyRun_SimpleString("import sys");
PyObject* moduleName = NULL;
moduleName = PyUnicode_DecodeFSDefault("requests");
//moduleName = PyBytes_FromString("requests"); //模块名,不是文件名//requests要先安装,否则会报没有找到requests模块的错误,且requests最好安装在python的安装目录下,我试过将requests安装在d盘,python安装在c盘,但导入requests时一直失败。后来把request包复制到python34的目录下,运行pip install 的命令安装,然后就可以正常导入了
if (!moduleName){
cout << "[ERROR] Python string is null" << endl;
iRet = -1;
}
PyObject* pModule = PyImport_Import(moduleName);
if (!pModule) // 加载模块失败
{
PyErr_Print();//这是python 自带的错误输出函数;
cout << "[ERROR] Python get module failed." << endl;
iRet = -1;
break;
}
PyRun_SimpleString("f=open('D:\\PythonScript\\RobotRecharge.py','r',encoding='gbk')");//读取绝对目录中的py脚本。这个脚本我就不贴出来了,大家自己写一个
PyRun_SimpleString("exec(f.read())");//将脚本读出后,执行这个脚本
iRet = 0;
} while (0);
Py_Finalize();
return iRet;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值