C++之创建与使用dll

目录

1、创建dll

test.h

test.cpp

Source.def

2、使用dll

testdll.cpp


DLL,全称“Dynamic Link Library”,中文名为“动态链接库”,是一种在Windows操作系统中常见的库文件格式。它包含了可以由多个程序同时使用的代码和数据。与静态链接库(Static Link Library,.lib文件)不同,动态链接库在程序运行时才被加载到内存中,因此可以节省内存空间,并允许程序在不重新编译的情况下更新库文件。

DLL文件通常包含以下类型的函数和数据:

导出函数:这些函数可以由其他程序调用。它们被编译并包含在DLL中,以便其他程序可以通过动态链接来调用它们。

资源:DLL可以包含图标、位图、字符串等资源,这些资源可以被其他程序使用。

数据:DLL也可以包含共享数据,这些数据可以在多个程序之间共享。

使用DLL的好处包括:

资源共享:多个应用程序可以同时使用同一个DLL中的函数和数据,从而节省磁盘和内存空间。

模块化:DLL允许将代码划分为独立的模块,这使得代码更易于管理和维护。

插件化:应用程序可以使用DLL作为插件来扩展其功能,而无需修改应用程序本身。

版本控制:通过更新DLL文件,可以在不重新编译整个应用程序的情况下更新程序的功能。

然而,使用DLL也需要注意一些问题,如DLL的依赖管理、版本冲突以及安全性等。

1、创建dll

创建mydll工程,移除默认文件,添加以下文件

test.h

#ifdef MYDLL_EXPORTS#define MATH_API __declspec(dllexport)#else#define MATH_API __declspec(dllimport)#endifMATH_API int Add(int a, int b);MATH_API int Sub(int a, int b);

test.cpp

#include "test.h"int Add(int a, int b) {  return a + b;}int Sub(int a, int b) {  return a - b;}

Source.def

LIBRARYEXPORTSAddSub

编译后生成mydll.lib和mydll.dll文件

2、使用dll

创建控制台项目,添加以下文件

testdll.cpp

#include <iostream>
#include "windows.h"
​
typedef int (*lpAddFun)(int, int);//宏定义函数指针类型
typedef int (*lpSubFun)(int, int);//宏定义函数指针类型
​
int main()
{std::cout << "Hello World!\n";HINSTANCE hDll;//DLL 句柄lpAddFun addFun;//函数指针lpSubFun subFun;//函数指针hDll = LoadLibrary(L"mydll.dll");//动态获取dll文件的路径if (hDll != nullptr){addFun = (lpAddFun)GetProcAddress(hDll, "Add");//根据函数名在dll文件中获取该函数的地址  subFun = (lpSubFun)GetProcAddress(hDll, "Sub");if (addFun != nullptr){int result = addFun(2, 3);int result2 = subFun(10, 6);printf("2+3=%d\n", result);printf("10-6=%d", result2);}
​FreeLibrary(hDll);}return 0;
}
​

将mydll.lib和mydll.dll文件拷贝到exe文件所在目录下

Hello World!

2+3=5

10-6=4

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

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

相关文章

Docker安装主从数据库

我自己的主数据库名字 user_muster 密码是123456 从数据库 就是slave2 名字是root 密码是123456 首先开启docker后直接执行命令 docker run -d \ -p 3307:3306 \ -v /xk857/mysql/master/conf:/etc/mysql/conf.d \ -v /xk857/mysql/master/data:/var/lib/mysql \ -e MYSQL_…

瑞芯微 | I2S-音频基础 -1

最近调试音频驱动&#xff0c;顺便整理学习了一下i2s、alsa相关知识&#xff0c;整理成了几篇文章&#xff0c;后续会陆续更新。 喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。 1. 音频常用术语 名称含义ADC&#xff08;Analog to Digit Conversion&#xff09;模拟信号转换…

OpenCASCADE+Qt创建建模平台

1、建模平台效果 2、三维控件OCCWidget 将V3d_View视图与控件句柄绑定即可实现3d视图嵌入Qt中&#xff0c;为了方便也可以基于QOpenGLWidget控件进行封装&#xff0c;方便嵌入各种窗体使用并自由缩放。 #ifndef OCCTWIDGET_H #define OCCTWIDGET_H#include <QWidget> #i…

FFmpeg教程(干货快速上手)

什么是FFmpeg&#xff1f; FFmpeg是一款免费、开源的跨平台多媒体处理工具&#xff0c;它支持几乎所有的视频格式和编码标准。FFmpeg包含了一系列的子项目和工具&#xff0c;如ffmpeg命令行工具用于转码和处理视频和音频文件&#xff0c;ffplay用于播放多媒体内容&#xff0c;…

Python学习笔记 -- 基础语法篇

目录 一. 数据类型 二. 注释 三. 输入输出及强制类型转换 3.1 print和input 3.2 强制类型转换 四. 运算符 4.1 算数运算符 4.2 比较运算符 4.3 逻辑运算符 五. 多元赋值 六. 条件语句 七. 循环语句 7.1 while循环 7.2 for循环 7.3 continue和break 一. 数据类型 …

人工智能|机器学习——k-近邻算法(KNN分类算法)

1.简介 k-最近邻算法&#xff0c;也称为 kNN 或 k-NN&#xff0c;是一种非参数、有监督的学习分类器&#xff0c;它使用邻近度对单个数据点的分组进行分类或预测。虽然它可以用于回归问题&#xff0c;但它通常用作分类算法&#xff0c;假设可以在彼此附近找到相似点。 对于分类…

ADS功分器模型含义

ADS功分器模型含义 文章目录 ADS功分器模型含义dbpolar和单个值polar和单个值polar和dbpolar单个值 S21和S31传输系数 S11和S22反射系数 Isolation 隔离度 Zref 端口的参考阻抗&#xff0c;默认为50Ω CheckPassivity 检查是否无源&#xff0c;默认是无源器件 目前根据仿真结…

3D数字孪生运行不起来?该检查你的电脑配置了

运行3D数字孪生项目通常需要一定的计算资源和图形处理能力。以下是一些常见的电脑配置要求&#xff0c;可以作为参考&#xff1a;1处理器&#xff08;CPU&#xff09;&#xff1a;推荐使用多核心处理器&#xff0c;如Intel Core i7或更高级别的处理器。较高的时钟频率和较大的缓…

2024 批量下载公众号文章内容/阅读数/在看数/点赞数/留言数/粉丝数导出pdf文章备份(带留言):公众号半佛仙人近1500篇历史文章在线查看,找文章方便了

关于公众号文章批量下载&#xff0c;我之前写过很多文章&#xff1a; 视频更新版&#xff1a;批量下载公众号文章内容/话题/图片/封面/音频/视频&#xff0c;导出html&#xff0c;pdf&#xff0c;excel包含阅读数/点赞数/留言数 2021陶博士2006/caoz的梦呓/刘备我祖/六神读金…

在Vue中处理接口返回的二进制图片数据

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

清华大学1748页CTF竞赛入门指南,完整版开放下载!

CTF是一种针对信息安全领域的经济性挑战&#xff0c;旨在通过解决一系列的难题来寻找隐藏的“flag”。CTF比赛战队一般是以高校、科研单位、企业、信息安全从业者或社会团体组成。对于网安爱好者及从业者来说&#xff0c;拥有“CTF参赛经验”也是求职中的加分项。 前几天分享的…