VS DLL延迟加载技术

转载:VS之DLL延迟载入_Starr-CSDN博客

重点:

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代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值