Microsoft Visual Studio中Cpp调用Python代码
本文介绍如何在Microsoft Visual Studio中,开发cpp项目时,调用python代码。
文章目录
- Microsoft Visual Studio中Cpp调用Python代码
- 前言
- 一、Cpp生成exe文件
- 1.1 安装python环境
- 1.2 配置Microsoft Visual Studio
- 1.3 进行cpp调用python代码编写
- 二、生成动态链接库的情况
- 三、QT与<Python.h>同时开发导致的不兼容问题
前言
在使用Microsoft Visual Studio做Cpp项目开发时,有时不得不使用Python部分的代码。本文介绍在两种场景下如何调用Python代码:cpp项目生成exe文件和cpp项目生成dll动态链接库文件。
一、Cpp生成exe文件
1.1 安装python环境
值得注意的是,尽量不要使用Conda虚拟环境,因为虚拟环境有很多文件是不齐全的。这里,我们使用从python官网下载的python安装程序,进行安装。
记得安装完毕后,要配置系统变量环境。这样比如执行pip指令后,才会更新我们新安装的环境。
我安装的是Python 3.6版本,下载地址
下载完成后,在弹出的安装选项中记得选择自定义路径,并添加到系统变量环境中。
1.2 配置Microsoft Visual Studio
我的python安装路径是 D:\Users\ASUS\Python\Python36\libs
点击项目属性框,进行如下配置
1.3 进行cpp调用python代码编写
Py_Initialize();
if (!Py_IsInitialized())
{
printf("初始化失败!");
return;
}
Py_Finalize();
二、生成动态链接库的情况
这种情况和上述第一部分的配置和代码编写方法都是一样的。
需要注意的是python的版本问题,如果版本不一致的话,则会报错。比如说,我们的cpp代码最后生成了a.dll文件,被b.exe所加载使用。如果b.exe使用的python版本是3.6(其具有python3.6.dll),而我们的a.dll是依赖python3.7编译的,那么就会报错。
三、QT与<Python.h>同时开发导致的不兼容问题
QT环境下集成Python出现PyType_Slot *slots;冲突问题
解决方法:
typedef struct{
const char* name;
int basicsize;
int itemsize;
unsigned int flags;
#undef slots //这里取消slots宏定义
PyType_Slot *slots; /* terminated by slot==0. */
#define slots Q_SLOTS //这里恢复slots宏定义与QT中QObjectDefs.h中一致
} PyType_Spec;