Dll的延迟装入

注:只有静态装入dll才需要使用dll的延迟装入
要实现DLL静态的延迟装入,必须先导入头文件#include<delayimp.h>,同时导入静态库#pragma comment(lib,“delayimp.h”).同时,设置vs里的项目属性,链接器–所有选项–延迟加入的DLL中的DLL名称。如果想卸载延迟加载的DLL,可以在链接器–高级–卸载延迟加载的DLL里选择TRUE,同时调用函数__FUnloadDelayLoadedDLL2(“DLL名称”),即可在静态装入dll的情况下卸载dll。要想看看延迟装入dll是否有错,需要在程序开始处装载通知函数钩子__pfnDliNotifyHook2=自定义函数名,和失败函数钩子__pfnDliFaliureHook2=自定义函数名。函数类型为:
typedef FARPROC (WINAPI *PfnDliHook)unsigned dliNotify, PDelayLoadInfo pdli );dliNotify表明处理到了哪一步了,有如下类型:dliStartProcessing 开始处理了;dliNotePreLoadLibrary 调用LoadLibrary之前发出此通知;dliNotePreGetProcAddress 调用GetProcAddress之前发出此通知;dliFailLoadLib 调用LoadLibrary失败发出此通知;dliNoteEndProcessing 所有工作处理完了发出此通知。typedef struct DelayLoadInfo { DWORD cb; // size of structure PCImgDelayDescr pidd; FARPROC * ppfn; // points to address of function to load LPCSTR szDll; // name of dll DelayLoadProc dlp; // name or ordinal of procedure HMODULE hmodCur; // the hInstance of the library we have loaded FARPROC pfnCur; // the actual function that will be called DWORD dwLastError;// error received (if an error notification) } DelayLoadInfo, * PDelayLoadInfo;
此外当延迟装入因为某些原因失败了,就可以返回自定义的错误处理函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值