VS2017 DLL动态库使用教程【六】动态加载DLL

vs2017静态库和动态库的创建与使用简明教程 vs2017静态库和动态库的创建与使用简明教程静态库创建和使用创建使用易错点动态库创建和使用创建使用注意DLL的好处Others 静态库创建和使用 创建 打开vs2017点击创建新项目,选择静态库; 在StaticLib.cpp文件下写实现,再创建一个对应的头文件写声明: 项目->生成 即可在输出文件夹下得到对应的lib文件: 使用 新建一个项目,点击属性,配置三条款项: VC++目录的包含目录和库目录分别加入lib对应头文件的位置和lib文件的位置; 链接器->输入 添 阅读详情

什么是动态加载?

之前我们都是用的是自动加载,他是在exe运行启动时,就加载dll。

动态加载,在编译的时候不指定dll,根据代码需要时调用LoadLibrary来加载dll。

而且动态加载可以根据程序需时卸载dll,自动加载只能程序结束卸载dll。

动态加载也叫手工加载。

 

如何使用动态加载?

首先我们对之前的dll文件做一个小改动,因为动态加载无需声明头文件(*.h),所以所以有一个很严重的问题——我们不能使用c++的重载特性了,如果你写一个重载函数,比如:

int add(int x,int y);    //把x和y相加
int add(int x,int y,int z);    //把x,y和z相加

但是在dll内,因为他一些规范封装原则,c++函数,在内存中是这样的

_add_int_int  //以函数名+形参的形式储存
_add_int_int_int //x,y,z相加有三个形参,所以三个int

用自动加载,我们有头文件(*.h)帮助引导重载,可是动态加载无需声明头文件,就需要我们把函数声明成c风格的形式。

很简单,只需要在dll的头文件声明一下就可以了。

//如果你看不懂为什么要条件编译,请阅读第四章
#ifndef MYDLL_EXPORTS
#define MYDLL _declspec(dllexport)
#else
#define MYDLL _declspec(dllimport)
#endif // !MYDLL

extern "C" MYDLL int add(int a, int b);    //函数前加extern "C"可以声明c风格,想具有了解可以在网上搜一下。

好了,写好后可以编译,生成dll,然后把他取出来。

然后放到DLLAPP,也就是使用dll的程序目录下。

 

DLLAPP下的唯一main.cpp文件,就和你平时做c++练习一样

代码很多,不要慌,仔细看注释。

#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
int main()
{
	HINSTANCE handle = LoadLibrary("my.dll");//LoadLibrary填入ddl文件名赋值给句柄,你不懂句柄就拉倒了,这个不重要。
	if (handle) //判读句柄内dll是否可用
	{
		typedef int(*DLL_FUNCTION_ADD) (int, int); //typedef定义一下函数指针,你不懂的话就记住末尾两个是你需要函数的形参。
		DLL_FUNCTION_ADD dll_add = (DLL_FUNCTION_ADD)GetProcAddress(handle, "add"); //使用GetProcAddress得到函数,参数是句柄名和函数名
		if (dll_add) //还是判断一下函数指针是否有效
		{
			int result = dll_add(10, 11); //终于可以用add了
			printf("dll_add返回值:%d\n", result); //打印吧
		}
		FreeLibrary(handle); //卸载句柄,,
	}
	
	system("pause");
	return 0;
}

动态加载基本就是这个套路,你需要动态加载可以直接粘贴代码即可。

 

笔记中代码均保存到我的网盘下,链接:https://share.weiyun.com/5HMq3Cc

 

C++学习记录006——调用DLL(动态) C++ 动态调用动态链接库 阅读详情

相关推荐

LoadLibrary方法加载运行DLL库

最近和另一家公司对接,要求用对方提供的测试程序测试我们做的DLL。 接到对方的测试程序,发现和我们以前调用DLL的方式不太一样。但我稍微看了一会代码也看懂其意思了,一天搞定了。 但其中也遇到些小困惑,记录一下。 下面是我实验写的小Demo: my_dll.h: #ifdef MY_DLL_EXPORTS #define MY_DLL_API __declspec(dllexp...

weixin_30270889的博客 5656

[C++]如何动态加载DLL

实际流程 1.动态加载动态库 LoadLibrary("xxxx.dll") // 宏函数 依据项目定义字符格式决定函数版本 LoadLibraryA("xxxx.dll")// 窄字符版本 LoadLibraryW("xxxx.dll")// 宽字.

八宝咸鱼 7818

Visual Studio2017动态库DLL制作与使用

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件...

凉城旧梦彡的博客 1万+

VS中静态库和DLL的使用

静态库和动态库的使用,区分了附加包含目录、附加库目录、附加依赖项等概念

qq_41812926的博客 5343

在Visual Studio 2017下实现动态库加载

在开发与测试中,有时需要加载不同的库,如果每次修改源程序就会非常麻烦,但如果指定库函数进行动态加载,则可以不用修改代码就能实现不同库函数的功能。以下是我在Visual Studio 2017环境下实现的动态库加载实验。 本文参考例程:https://blog.youkuaiyun.com/qq_28249373/article/details/76098914 首先我们需要建立DLL工程,生成自己的动态链...

Liut2016的博客 3622

VS2017环境下动态链接库编写及调用

最近项目中有用到DLL,于是就去了解了一下动态链接库(DLL)以及基本的的编写方法。先来区分一下静态库和动态库: 静态库 window下是 .lib格式 linux下是 .a格式编译期引入到程序代码 -l 动态库 window下是 .dll格式 linux下是 .so格式运行时候进行链接 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是...

shimadear的博客 5785

如何生成dll文件 采用VS2017生成dll文件(动态库文件)和lib文件(静态库文件)以C语言为例

下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一: 第一步:新建一个项目 第二步:选择Windows桌面向导(这里先不要去管上面的“动态链接库(DLL)”) 第三步:选择动态链接库,并空项目打勾√ 第四步:添加一个.c源文件 第五步:(因为这里以C语言为例子,将后缀改为.c) 第六步:在c文...

weixin_40933653的博客 1万+

如何用VS2019创建并调用动态库

网上查了相关资料,创建动态库主要有两种方式,一种是通过空项目创建动态库,一种是直接创建动态链接库,本文所总结的就是第二种,直接创建动态链接库。

weixin_44049823的博客 3644

如何用OpenCV实现一个简单功能并打包成一个dll动态库,然后在unity里面调用

       写这篇博​​客是因为最近要完成一些小任务,想把自己做的记录下来,希望能不断进步吧。如果有不对的地方,希望大家指正。        在这里我用的是VS2017 + Unity2018.2 + OpenCV3.4.0,其他的过程应该也会相同吧,大家自己琢磨琢磨好了。 一,下载OpenCV的并配置VS2017环境 1,OpenCV中的下载和配置可以参考这一篇博客,写的很详细也很有用。...

毛毛的博客 3553

【C++动态库】DLL动态库加载失败导致程序启动报错以及DLL库加载失败的常见原因分析与总结

本文讲述dll动态库加载失败导致程序启动报错问题,以及dll库加载失败的常见原因分析与总结。

dvlinker的技术专栏 2万+

VS2017+QT生成动态库(DLL)并完成调用

一、环境介绍 QT版本: 5.12.6 VS版本: 2017 二、功能介绍 在VS2017环境下创建QT工程,并生成DLL库;然后再创建工程调用测试。 其他链接: Win10+vs2017+QT5.12.6开发环境搭建:https://blog.youkuaiyun.com/xiaolong1126626497/article/details/112402861 Window系统下QT5创建DLL动态库并完成调用:https://blog.youkuaiyun.com/xiaolong1126626497/ar...

4970

vs2017下创建使用动态库。

动态库又称为动态链接库,DLL(Dynamic Link Library)的缩写形式。 动态库是一个包含可由多个程序同时使用的代码和数据的库。 在vs2017创建并使用动态库 1,创建项目 2,在头文件处新建自己的头文件 选中头文件 按Ctrl+Shift+A创建新建项 在add.h中加入一些代码 #pragma once和#ifndef...#endif 都...

GoingJack博客 2658

Halcon 3D视觉实战:5步将线激光高度数据转为可分析的深度图与点云

本文详细介绍了如何利用Halcon平台将线激光高度数据转换为深度图与点云的5步实战方法。通过具体代码示例和工业检测案例(如锂电池胶水测量),帮助工程师高效处理3D视觉数据,实现从原始数据到三维可视化的完整技术链路。

weixin_29039773的博客 361

vs2017创建c++动态库工程

开发环境:VS2017、WIN10。 1、vs2017动态库工程创建 文件->新建->项目。新建项目页面中选择,Visual C++->Windows桌面,选择右侧的空工程,添加名称及位置,点击"确定",创建工程。 解决方案平台选:Debug, x64。注意:发布时,选择Release模式。 菜单栏上,项目->属性,进入属性页管理。配置属性->常规,配置类型改为"动态库(.dll)",点击应用、确定。完成工程配置。...

alex1801 4159

从数学到机床:RTCP背后的几何变换与工业实现

本文深入解析RTCP(Rotary Tool Center Point)技术在五轴数控加工中的核心作用,通过几何变换与运动学原理实现刀尖点跟随,确保加工精度。从数学基础到工业实现,详细探讨了算法架构、机床结构适配及精度保障方法,为数控系统开发和高效加工提供关键技术支撑。

jump7的博客 261

电信天翼云OS(ctyunos)内网离线安装Docker-CE保姆级避坑指南(附完整依赖包清单)

本文提供电信天翼云OS(ctyunos)内网环境下Docker-CE的离线安装全攻略,涵盖依赖分析、离线包制备、冲突解决等关键步骤。针对金融、政务等隔离网络场景,详细解析如何通过本地仓库构建和优化配置,实现高效安全的容器化部署,助力企业快速搭建内网Docker环境。

398

VS2017 用MFC调用QT 带界面的动态库DLL

本文主要参考https://blog.youkuaiyun.com/shuishanga/article/details/52183159文章, 本文与其相似很多。 主要是平台不一样,记录下实现过程。 VS平台:VS2017 QT:5.11.2 目的:使用MFC 调用QT动态库。 使用到的辅助文件qtwinmigrate,可以在这个网址下载。https://github.com/qtpro...

u012512100的博客 3469

UG NX二次开发(C#)--详细讲述编程模板NXOpen_CS_Wizard的代码意义,帮你轻松进入NXOpen(C#)二次开发

有几个读者私信问我,在看了“NX1957在VS2019上二次开发的环境配置”后,能完成了UG NX二次开发(C#)模板的配置,也能根据模板创建工程,但是对工程文件.cs不甚理解;并且,在UG Styler新建完成后,其也有一个dlx文件和.cs文件,也不清楚怎么使用。本文先对UG NX二次开发(C#)模板文件进行讲解,在下一个博客中,讲解Styler新建后的模板文件。以上就是对编程模板NXOpen_CS_Wizard(c#)的讲解,其实只要明白了逻辑关系,编程实现只是时间问题,祝你好运。

GimiGimmy 1786

VS下生成C程序静态库(LIB)及动态库(DLL)的方法

一、前言 工作中有时候因为分工合作的原因需要让别人调用自己写的代码去完成某项功能,但是又不想让别人看到具体的实现过程,只是提供一个API形式的接口供别人调用;又或者是其他的一些原因,有必要学习静态库及动态库的相关知识,本文大多数内容均为参考网上资料后的整理,作为学习的总结。 二、DLL与LIB文件的区别 lib是一个二进制文件,与dll类似,供其他程序调用。lib与dll的区别是:dl...

心城追梦的博客 9874

RK3568平台开发系列:Android环境下CAN的使用

在RK3568平台上,我们可以利用Android环境中的API来实现CAN的使用。通过以上步骤,我们可以在Android应用中发送和接收CAN数据,并进行相应的处理。当接收到CAN数据时,将触发onMessageReceived回调方法,我们可以在这个方法中对接收到的数据进行处理。在上述代码中,我们指定了CAN的ID为0x123,数据为{0x01, 0x02, 0x03},并设置了标志位和周期。接收CAN数据需要注册一个监听器,并在监听器中处理接收到的数据。发送CAN数据需要指定CAN的ID和数据。

2301_79330513的博客 1912

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 463

VS2017制作和使用动态库

目录制作动态库使用动态库动态加载动态库方式 制作动态库 打开VS2017,新建静态库项目 2. 项目内删除无关文件,再新建一个头文件mydll.h 3. 示例代码 // mydll.h #ifndef MYDLL #define MYDLL #ifndef DLL_API #define DLL_API _declspec(dllexport) #else #define DLL_API _declspec(dllimport) #endif // !DLL_API //声明导出的函数 DL

小白一直白 1748

Python电商网站全站爬虫实战:以京东为例的数据采集与分析

随着电子商务的蓬勃发展,电商数据已成为市场研究、竞争分析和消费者行为研究的重要资源。本文详细介绍了如何使用Python最新技术栈构建一个高效的电商网站全站爬虫,以京东为例实现商品数据的自动化采集。文章涵盖了爬虫的法律与伦理考量、技术选型、反爬虫策略应对、分布式架构设计以及数据存储方案,并提供了完整的代码实现。本爬虫系统采用Scrapy-Redis分布式框架、Selenium动态渲染、智能代理轮换和机器学习验证码识别等先进技术,能够稳定高效地抓取京东全站商品数据,为电子商务研究提供数据支持。关键词。

2201_76125261的博客 415

【VisualStudio 2017动态库(.dll)生成与使用】

Windows下 VisualStudio 2017 C++ 动态链接库的生成以及使用提示:以下是本篇文章正文内容,下面案例可供参考以上就是生成动态库并调用的方法。参考文章:blog。

weixin_53662528的博客 1889

Arduino、ESP32驱动TEMT6000传感器(光照传感器篇)

TEMT6000是一个三极管类型的光敏传感器,其光照强度和基极的电流成正比。用起来也相当简单,可以简单的连接该传感器的基极到模拟电压输入,通过简单的检测电压值就可以判断当前的光照强度。

不脱发的程序猿 4233

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VS之动态库实现和调用

程序开发中,经常会使用到动态库,那么动态库该如何实现和调用呢?本文通过一个简单的例子实现。

冰点蓝欣的专栏 2821

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: VS2017 DLL动态库使用教程【五】dll中使用导出一个类
下一篇: VS2017 DLL动态库使用教程【七】为什么我的程序不能在别人电脑运行
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值