把c++的函数导出为dll文件

目录

什么是dll文件

把c++函数变为dll有什么好处

开始教程

打开Visual Studio 2022创建

 调整编译器设置

创建头文件

DLL1.h

创建源文件编辑函数内容

DLL1.cpp

编译成dll文件


什么是dll文件

DLL(Dynamic Link Library,动态链接库)是一种包含可被多个程序共享的代码和数据的文件格式。它可以被动态链接到程序中,在程序运行时提供所需的功能和服务。DLL 文件通常包含函数、类、变量和资源等,可以被其他程序调用和使用。使用 DLL 可以实现代码的复用、模块化开发和提高程序性能等好处。

把c++函数变为dll有什么好处

  1. 代码复用:通过将函数导出为 DLL,可以将函数封装在独立的库中,供其他程序重复使用,避免重复实现相同的功能,提高代码的复用性。

  2. 模块化开发:将函数导出为 DLL 可以帮助实现模块化开发,即将程序划分为多个模块,每个模块对应一个或多个 DLL,方便团队协作,每个人负责不同的模块。

  3. 提高性能:将常用的函数导出为 DLL,可以提高程序的运行效率。由于 DLL 是被动态链接的,它们可以被多个程序共享,减少内存使用。

  4. 保护知识产权:通过将核心代码封装在 DLL 中,可以保护知识产权,只将 DLL 提供给需要的人使用,不需要对源代码进行公开。

并且在python中你可以调用你自己编写的dll文件从而既可以最大的加快代码的运行速度(因为是用C++写的快了不止一点),又能达到你想要的效果。

开始教程

打开Visual Studio 2022创建

打开Visual Studio 2022选择创建新项目

搜索dll或者动态链接库

我选择的是第一个

进入后出现了

除了划红线的

其他的打开会自己创建

 调整编译器设置

进入调试中的调试属性

 确保红框一致

(如果是64位就最好是64位)

创建头文件

头文件结构为

DLL1.h

#pragma once#ifndef _DLL1_H
#define _DLL1_H#define DLL1_API extern "C"  _declspec(dllexport)DLL1_API double Add_sum(int n);#endif // DEBUG

其中开头的

#pragma once#ifndef _DLL1_H
#define _DLL1_H

是宏定义为头文件必须的

#define DLL1_API extern "C"  _declspec(dllexport)

这是告诉编译器是以c/c++语言编辑的

接下来就是定义函数的格式,在头文件中只是声明不进行编辑

DLL1_API double Add_sum(int n);

最后再加一句

#endif // DEBUG

创建源文件编辑函数内容

函数为计算2的n次方......这里不用在意函数内容

DLL1.cpp

#include "DLL1.h"
#include "iostream"
using namespace std;
// 传入参数位数字,无返回,输出num的平方
DLL1_API double Add_sum(int n)
{if (n == 0)return 1.0;int max = 1;int i = 2;double j = 1 / 2;while (n != 0){int sum_1 = n % 2;if (n > 0){if (n == 1)max *= i;i = i * i;n = n / 2;}else{if (n == 1)max *= i;j = j * j;n = n / 2;}}return max;
}

编译成dll文件

点击重新生成

这样如果没报错得到话就会生成一个dll文件

 在当前目录下

 做这一期的原因是python代码有时运行的速度很慢,但是python的包使用很便捷不想抛弃,所以用c语言优化一部分代码来实现加快程序运行速度

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Data Rescue Professional for Mac:专业的数据恢复工具

在数字化时代,我们的生活和工作离不开电脑和存储设备。但是,意外情况时常发生,例如误删除文件、格式化硬盘、病毒攻击等,这些都可能导致重要的数据丢失。面对数据丢失,我们迫切需要一款可靠的数据恢复工具。今天&#…

css 分割线中间带文字

效果图 代码块&#xff08;自适应&#xff09; <div class"line"><span class"text">我是文字</span></div>.line{height:0;border-top:1px solid #000;text-align:center;}.text{position:relative;top:-14px;background-color:#…

手写Mybatis:第6章-数据源池化技术实现

文章目录 一、目标&#xff1a;数据源池化技术实现二、设计&#xff1a;数据源池化技术实现三、实现:数据源池化技术实现3.1 工程结构3.2 数据源池化技术关系图3.3 无池化链接实现3.4 有池化链接实现3.4.1 有连接的数据源3.4.2 池化链接的代理3.4.3 池状态定义3.4.4 pushConnec…

面向对象的设计原则

设计模式 Python 设计模式&#xff1a;对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计 面向对象 三大特性&#xff1a;封装、继承、多态 …

MongoDB基础知识点

MongoDB基础知识点 1.MongoDB简介1.1基本信息1.2作用1.3下载 2.MongoDB安装1.Ubuntu22.042.Windows(非msi) 3.MongoDB基本操作1.基本概念2.MongoDB文件增删改查(CURD)1.插入数据2.查询数据3.修改数据4.删除数据5.删除字段 4.MongoDB实战管理系统数据库设计1.设计数据库2.Mongod…

在iPhone 15发布之前,iPhone在智能手机出货量上占据主导地位,这对安卓来说是个坏消息

可以说这是一记重拳&#xff0c;但似乎没有一个有价值的竞争者能与苹果今年迄今为止的智能手机出货量相媲美。 事实上&#xff0c;根据Omdia智能手机型号市场跟踪机构收集的数据&#xff0c;苹果的iPhone占据了前四名。位居榜首的是iPhone 14 Pro Max&#xff0c;2023年上半年…

常用框架分析(7)-Flutter

框架分析&#xff08;7&#xff09;-Flutter 专栏介绍Flutter核心思想Flutter的特点快速开发跨平台高性能美观的用户界面 Flutter的架构框架层引擎层平台层 开发过程使用Dart语言编写代码编译成原生代码热重载工具和插件 优缺点优点跨平台开发高性能美观的用户界面热重载强大的…

2023年7月京东打印机行业品牌销售排行榜(京东运营数据分析)

鲸参谋监测的京东平台7月份打印机行业销售数据已出炉&#xff01; 7月份&#xff0c;打印机市场呈现下滑趋势。根据鲸参谋平台的数据可知&#xff0c;当月京东平台打印机的销量为48万&#xff0c;环比下降约28%&#xff0c;同比下降约18%&#xff1b;销售额为4亿&#xff0c;环…

docker 学习-- 04 实践2 (lnpmr环境)

docker 学习 系列文章目录 docker 学习-- 01 基础知识 docker 学习-- 02 常用命令 docker 学习-- 03 环境安装 docker 学习-- 04 实践 1&#xff08;宝塔&#xff09; docker 学习-- 04 实践 2 &#xff08;lnpmr环境&#xff09; 文章目录 docker 学习 系列文章目录1. 配…

com.squareup.okhttp3:okhttp 组件安全漏洞及健康度分析

组件简介 维护者square组织许可证类型Apache License 2.0首次发布2016 年 1 月 2 日最新发布时间2023 年 4 月 23 日GitHub Star44403GitHub Fork9197依赖包5,582依赖存储库77,217 com.squareup.okhttp3:okhttp 一个开源的 HTTP 客户端库&#xff0c;可以用于 Android 和 Jav…

IP初学习

1.IP报文 首部长度指的是报头长度&#xff0c;用于分离报头和有效载荷 2.网段划分 IP地址 目标网络 目标主机 3.例子 4.特殊的IP地址 5.真正的网络环境 6.调制解调器 “猫”&#xff0c;学名叫宽带无线猫 7.NAT 源IP在内网环境不断被替换 8.私有IP不能出现在公网上 因…

SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis

一、背景 在SpringBoot Mybatis 项目中&#xff0c;需要连接 多个数据源&#xff0c;连接多个数据库&#xff0c;需要连接一个MySQL数据库和一个Oracle数据库和一个Redis 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot&l…