延迟载入Dll(动态载入Dll)
2024-10-10 20:31:37
windows核心编程(第五版)20.3节的延迟载入Dll
延迟载入Dll技术出现的原因:
因为DLL的加载是比较浪费时间的,特别是大型软件加载,因此,这项技术是在应对软件初始化过程中避免浪费太多的时间。
[1]因为部分DLL是在软件运行过程中才加载的。因此,DLL的加载延迟在了进程的运行过程中,节省程序的初始化时间。
[2]解决软件兼容性问题,比如一个新软件在老系统中运行,需要调用老版本的函数,我们只需要先使用GetVerisonEx()获得系统版本,然后再调用相应的函数,这样就解决了软件兼容性的问题,否则,新版在旧系统中就会报错。
源代码:
Resource.def
LIBRARY
EXPORTS
sub_1 @1
Dll.cpp
// Dll.cpp : 定义 DLL 应用程序的导出函数。
// #include "stdafx.h"
#include <stdio.h> #define dll extern "C" __declspec(dllexport)
#include "dll.h"
dll void __stdcall sub_1()
{
printf("Hello SH!\n");
}
Dll.h
#pragma once
#ifndef dll #define dll extern "C" __declspec(dllimport) #endif dll void __stdcall sub_1();
延迟载入Dll.cpp
// 延迟载入Dll.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <Windows.h>
#include <delayimp.h>
#pragma comment(lib, "Delayimp.lib")
#include "../Dll/Dll.h"
#pragma comment(lib, "Dll")//dll.lib 要放到cpp文件下
int main()
{
if (!GetModuleHandle(L"Dll.dll"))
printf("dll.dll Not Load\r\n"); sub_1();
__HrLoadAllImportsForDll("Dll.dll");
if (GetModuleHandle(L"Dll.dll"))
printf("Dll.dll Load\r\n"); __FUnloadDelayLoadedDLL2("Dll.dll");
if (!GetModuleHandle(L"Dll.dll"))
printf("Dll.dll UnLoad\r\n");
return 0;
}
相关设置:
控制台应用程序相关设置:
最新文章
- Oracle OCP 1Z0-053 Exam Topics
- x01.Weiqi.10: 死活问题
- css样式表分类、选择器分类、css基础样式
- 牛客网程序员面试金典:1.2——原串翻转(java实现)
- Ta-lib 函数一览
- CART
- windows下用vs2008和boost结合编译程序
- python文件I/O
- SQL server脚本语句积累
- Gson反序列化Map,整型自动转换为浮点型
- CentOS 中安装和卸载 Emacs
- Codeforces 1009G Allowed Letters FMT,二分图,二分图匹配,霍尔定理
- #WEB安全基础 : HTTP协议 | 0x4 各种协议与HTTP协议的关系(一个报文的旅行)
- Django haystack+solr搜索引擎部署的坑.
- javascript es6系列教程 - 不定参数与展开运算符(...)
- python之函数用法startswith()
- BAT-增加JAVA环境变量(WIN764位)
- Linux 安装GCC讲解(在线和无网离线)
- yum安装pip,pip安装compose
- 改革春风吹满地---hdu2036(多边形用差积求面积)
热门文章
- Spring Boot 之注解@Component @ConfigurationProperties(prefix = ";sms";) 使用@ConfigurationProperties读取yml配置
- centos7: nginx安装配置
- 用R的dgCMatrix包来构建稀疏矩阵 | sparse matrix by dgCMatrix
- java中的Sort函数,你值得看
- python记录_day12 生成器
- kubeadm简单安装k8s
- GIL(全局解释器锁)与互斥锁
- node模块之net模块——socket
- springboot项目线程使用2
- vue路由守卫应用,监听是否登录