Windows动态链接库使用详解
目录
概念
生成dll文件
导出函数
使用方法
概念
C++共享函数库有两种方式,动态库和静态库,动态链接库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
生成dll文件
使用vs创建dll动态链接库项目,vs自动生成代码解析如下图。
导出函数
当我们需要给使用dll库的开发者提供可调用函数时,我们需要将自己编写的功能函数进行导出,在vs下导出的方式有很多,最常用的方法是在需要导出的函数前加 关键字 _declspec(dllexport) ,为了兼容性一般 以 extern "C" 的方式导出,示例如下。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"//dll入口函数
BOOL APIENTRY DllMain( HMODULE hModule,//指向dll本身的实例句柄DWORD ul_reason_for_call,//dll被调用的原因LPVOID lpReserved//保留参数)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH: //dll第一次被调用时,即当dll刚被注入时就会启动case DLL_THREAD_ATTACH://进程创建一线程时case DLL_THREAD_DETACH://线程调用了ExitThread来结束线程时case DLL_PROCESS_DETACH://dll被从进程的地址空间解除映射时break;}return TRUE;
}extern "C" _declspec(dllexport) void showWindow()
{MessageBoxA(NULL, "hello,I am dll", "dll", MB_OK);
}
使用方法
首先使用 LoadLibraryA 加载dll模块,函数只有一个参数:模块的名称。这可以是库模块(.dll文件)或可执行模块(.exe文件)。然后调用GetProcAddress(),获取模块中函数的地址,一般使用函数指针来接受其返回值。
GetProcAddress函数原型
FARPROC GetProcAddress(
[in] HMODULE hModule,
[in] LPCSTR lpProcName
);
[in] hModule
包含函数或变量的 DLL 模块的句柄。LoadLibrary、LoadLibraryEx、LoadPackagedLibrary 或 GetModuleHandle 函数返回此句柄。
[in] lpProcName
函数或变量名称,或函数的序号值。如果此参数是序数值,则必须在低阶字中;高阶字必须为零。
示例代码
#include<windows.h>typedef void (*Func)(void);int main()
{HMODULE mod=LoadLibraryA("Dll1.dll");Func fp = (Func)GetProcAddress(mod, "showWindow");fp();return 0;
}
运行截图
Windows动态链接库使用详解相关推荐
- Windows API函数大全---附:windows运行命令详解
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连 ...
- 技术资料收藏:Windows系统文件中文详解
技术资料收藏:Windows系统文件中文详解 A ↑ ACCESS.CHM - Windows帮助文件 ACCSTAT.EXE - 辅助状态指示器 ADVAPI32.DLL - 高级Win32应用程序 ...
- 《Windows系统文件名详解(上)》
WINDOWS应用 UNIX|LINUX office软件 其他内容 维修实例 其他 photoshop CorelDraw AutoCAD 其他 程序语言类 数据库类 网站建设 互联网应用 网络安全 ...
- Windows权限设置详解
Windows权限设置详解 随着动网论坛的广泛应用和动网上传漏洞的被发现以及SQL注入式***越来越多的被使用,WEBSHELL让防火墙形同虚设,一台即使打了所有微软补丁.只让80端口对外开放的WEB ...
- Windows 纤程详解
Windows 纤程详解 在Windows2000/XP中,纤程(fiber)相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另 ...
- Windows XP服务详解
Windows XP服务详解 微软的个人操作系统从Win98发展到WinXP,为什么突然变得那么消耗系统资源呢?以至于很多人都感觉WinXP只是高配置的电脑才能运行的操作系统,其实不然.WinXP ...
- 优化Windows XP虚拟内存详解(转)
优化Windows XP虚拟内存详解(转)[@more@] 什么是虚拟内存? 虚拟内存是Windows XP为作为内存使用的一部分硬盘空间.即便物理内存很大,虚拟内存也是必不可少的.虚拟内存在硬盘上其 ...
- Windows消息机制详解-5
一. 什么是消息 在解释什么是消息之前,我们先讨论一下程序的执行机制问题.大体上说,程序按照执行机制可以分为两类: 第一类是过程驱动.比如我们最早接触编程时写的C程序,又或者单片机程序.这类程序往往预 ...
- Windows监控——性能指标详解
性能计数器详解 Windows -Processor 指标名称 指标描述 指标范围 CPU利用率 (% Processor Time) % Processor Time指处理器执行非闲置线程时间的百分 ...
最新文章
- 前端神器—Google Chrome Devtools细节详解
- easyexcel导入固定sheet_easyexcel指定多个sheet导excel数据
- linux登oracle登陆不了,oracle: linux服务器本机不能登陆的解决
- Linux 平台 C/C++ 代码中设置线程名
- bit不是java基本类型吗_Java bit / byte 基本数据类型
- DevOps发布策略简介
- java就业培训教程 第一章读书笔记
- [转]看懂 Serverless,这一篇就够了
- 2017-11-28
- 国脉信息学院计算机网络,福建工程学院国脉信息学院《计算机网络模拟题》
- Java基础continue语句
- java代码混淆,程序加密推荐 java授权 支持JDK16
- python进行英语文献翻译
- netperf的安装、性能测试、参数、启动报错的坑、实例
- Win11蓝屏代码IRQL NOT LESS OR EQUAL的处理方法
- 控制面板卸载不了程序,教您如何处理控制面板中卸载不掉的软件
- php漂浮,【飘】【漂】:【飘浮】【漂浮】、【漂泊】【飘泊】【飘薄】
- python 自动识别图形验证码
- 如何在 MacOS Monterey 菜单栏上显示电池百分比
- matlab和creo仿真,一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法与流程
热门文章
- w10更新后怎么找计算机全民,Win10系统下全民WiFi不能用了怎么办
- Spark性能优化之-资源调优
- 使用spark.streaming.kafka.consumer.poll.ms和reconnect.backoff.ms解决spark streaming消费kafka时任务不稳定的问题
- android L和android M的区别
- CAD快捷键小结(一)
- 【九校3D2T3】世界第一的猛汉王
- 软负载和硬负载的区别分析
- android 三维软件 cad,CAD建模号APP
- 滴滴打车2015-2016
- android系统更新原理简介