重点:
1.延迟加载主要两个函数
查看是否被加载:GetModuleHandle(L"Mydll.dll")
手动卸载函数: __FUnloadDelayLoadedDLL2("Mydll.dll");
延迟加载优点:
延迟加载机制是为了提高进程加载效率的技术,在dll第一次被调用的时候才加载。
延迟加载机制没有对dll任何特殊要求,也就是说任意的一个DLL都可以被延迟加载(除了kernel32.dll)。
MainFile依赖于Mydll动态库
代码:
Mydll代码
#pragma once
//动态库导出宏
#ifdef MYDLL_EXPORTS
#define MYDLL_API _declspec(dllexport)
#else
#define MYDLL_API _declspec(dllimport)
#endif
//采用##技术
#define DeclareNum(name) \
void Get##name(int &num); \
void Set##name(const int& num); \
//单例技术
class MYDLL_API SingleInstance
{
public:
static SingleInstance& GetInstance();
~SingleInstance() = default;
SingleInstance(const SingleInstance&) = delete;
SingleInstance& operator=(const SingleInstance&) = delete;
DeclareNum(Num);
private:
SingleInstance() = default;
int num = 0;
};
#include "pch.h"
#include "SingleInstance.h"
SingleInstance& SingleInstance::GetInstance()
{
static SingleInstance instance;
return instance;
}
void SingleInstance::GetNum(int& data)
{
data = num;
}
void SingleInstance::SetNum(const int& data)
{
num = data;
}
MainFile代码