如何在Microsoft Visual Studio 中使用Cpp代码调用python代码

news2024/12/22 21:27:10

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; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue ant DatePicker 日期选择器 限制日期可控范围

场景 限制当前日期之前不能选择 限制只能选择日期区间内 Ant Design Vue 效果 <a-date-picker :disabledDate"disabledDate"></a-date-picker>method // 限制日期选择disabledDate(current) {return current && current > moment().endOf(&…

JSON parse error: Cannot deserialize instance of `xxx` out of START_ARRAY token

报错原因 前端传参类型是数组&#xff0c;后端接收参数类型是字符串。 解决办法 前端传参类型改为字符串即可。 如下图 【修改前】 【修改后】

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接

目录 操作系统介绍 什么是操作系统 常见操作系统 UNIX操作系统 linux操作系统 mac操作系统 嵌入式操作系统 个人版本和服务器版本的区别 安装VMWare虚拟机 VMWare虚拟网卡 ​编辑 配置虚拟网络编辑器 ​编辑 安装配置Windows Server 2012 R2 安装Windows Server 2…

如何解决电脑中缺失kernel32.dll文件的问题,四种常见的解决方法

在使用电脑过程中&#xff0c;有时我们可能会遇到一些错误提示&#xff0c;例如“找不到或缺少kernel32.dll文件”。遇到这种情况下&#xff0c;我们可以采取哪些措施来解决这个问题呢&#xff1f;本文将介绍关于kernel32.dll文件的作用&#xff0c;并提供四种常见的解决方法。…

拍摄花絮丨《巴渝小将》走进四川·五华山旅游区拍摄圆满成功!

巴渝小将&#xff0c;乘风破浪 本期节目孩子们离开父母&#xff0c;来到五华山旅游区&#xff0c;开启了两天一夜的录制挑战&#xff0c;他们究竟有着怎样的精彩表现呢&#xff0c;让我们一起往下看吧! 五华山旅游区 五华山旅游区是国家4A级旅游景区&#xff0c;位于四川邻水县…

【哈士奇赠书活动 - 44期】- 〖从零基础到精通Flutter开发〗

文章目录 ⭐️ 赠书 - 《从零基础到精通Flutter开发》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《从零基础到精通Flutter开发》 ⭐️ 内容简介 本书由浅入深地带领读者进入Flutter开发的世界&#xff0c;从Flutter的起源讲起&#xff0c…

Vue前端学习记录

目录 1 基础语法 v-text v-html v-on v-show v-if v-bind 2 简单应用 2.1 计数器 2.1.1所用知识 2.1.2代码及结果展示 2.2图片切换 2.2.1所用知识 2.2.2代码及结果展示 1 基础语法 v-text 设置标签的内容&#xff08;要替换部分字符用差值表达式{{}}&#xff09…

【RTOS学习】软件定时器 | 中断处理

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 软件定时器 | 中断处理 &#x1f3c0;软件定时器⚽守护任务守护任务的调度 ⚽使用软件定时器的函数…

如何配置微信小程序id

使用uni-app开发微信小程序项目&#xff0c;配置好微信小程序id是必不可少的。 一、如何找微信小程序id 二、如何配置微信小程序id

Unity之ShaderGraph如何实现冰冻效果

前言 今天我们来实现一个冰冻的效果,非常的炫酷哦。 如下图所示: 主要节点 Voronoi:根据输入UV生成 Voronoi 或Worley噪声。Voronoi 噪声是通过计算像素和点阵之间的距离生成的。通过由输入角度偏移控制的伪随机数偏移这些点,可以生成细胞簇。这些单元的规模以及产生的…

Seata入门系列【15】@GlobalLock注解使用场景及源码分析

1 前言 在Seata 中提供了一个全局锁注解GlobalLock&#xff0c;字面意思是全局锁&#xff0c;搜索相关文档&#xff0c;发现资料很少&#xff0c;所以分析下它的应用场景和基本原理&#xff0c;首先看下源码中对该注解的说明&#xff1a; // 声明事务仅在单个本地RM中执行 //…

Map和Set【OJ练习题】

文章目录 常用的Map和Set的使用方法1.数据去重2.统计出现的次数 数组中出现次数超过一半的数字缺失的第一个正整数只出现一次的数字随机链表的复制石头和宝石 常用的Map和Set的使用方法 1.数据去重 假设有10万个数据&#xff0c;如何去重重复的数据&#xff0c;重复的数据只保…

C++基础算法⑥——信奥一本通递归算法(全排列、分解因数、菲波那契数列、Pell数列、爬楼梯、汉诺塔问题)

递归算法 1199&#xff1a;全排列1200&#xff1a;分解因数1201&#xff1a;菲波那契数列1202&#xff1a;Pell数列1204&#xff1a;爬楼梯1205&#xff1a;汉诺塔问题 1199&#xff1a;全排列 由题目可知&#xff0c;输入一个字符串&#xff0c;我们要对字符串进行所有可能的排…

基于Jsp+Servlet+MySql的汉服网站的设计与实现-源码+毕业论文

源码和文档下载地址: https://juzhendongli.store/commodity/details/16 百度云盘中存储有。

Python 编写 Flink 应用程序经验记录(Flink1.17.1)

目录 官方API文档 提交作业到集群运行 官方示例 环境 编写一个 Flink Python Table API 程序 执行一个 Flink Python Table API 程序 实例处理Kafka后入库到Mysql 下载依赖 flink-kafka jar 读取kafka数据 写入mysql数据 flink-mysql jar 官方API文档 https://nigh…

计网小题题库整理第一轮(面向期末基础)(2)

该系列第二期&#xff0c;第一期链接在这~ 计网小题题库整理第一轮&#xff08;面向期末基础&#xff09;&#xff08;1&#xff09;https://blog.csdn.net/jsl123x/article/details/134030486?spm1001.2014.3001.5501 一.选择题 1、Internet的前身是 &#xff08;C &#x…

Visual Studio远程连接Linux编译代码时,头文件在/usr/include中找不到,文件存在于/usr/include的子目录中

文章目录 1 问题的提出2 问题分析3 问题的解决 1 问题的提出 VS2022在编译数据安全传输平台时&#xff0c;远程连接到Centos上进行编译&#xff0c;但是提示找不到json头文件。 2 问题分析 在Linux系统下编译代码时&#xff0c;系统会主动到/usr/include目录主动搜索头文件。…

解释器模式——化繁为简的翻译机

● 解释器模式介绍 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种用的比较少的行为型模式&#xff0c;其提供了一种解释语言的语法或表达的方式&#xff0c;该模式定义了一个表达式接口&#xff0c;通过该接口解释一个特定的上下文。在这么多的设计模式中&…

【神印王座】改编遇瓶颈,伊莱克斯无建模,皓晨加戏被绞杀,喜提五挂

【侵权联系删除】【文/郑尔巴金】 神印王座动画第78集已经更新了&#xff0c;官方实锤不会断更了&#xff0c;这可真的太爽了。龙皓晨在永恒之塔开始接受伊莱克斯的传承&#xff0c;不过剧情方面有点小瑕疵。伊莱克斯如此重要角色&#xff0c;竟然没有建模&#xff0c;龙皓晨更…

FreeRTOS 事件标志组 详解

目录 什么是事件标志组&#xff1f; 事件标志位 事件标志组 事件标志组相关 API 函数 1. 创建事件标志组 2. 设置事件标志位 3. 清除事件标志位 4. 等待事件标志位 事件标志组实操 什么是事件标志组&#xff1f; 事件标志位 表明某个事件是否发生&#xff0c;联想&am…