DLL如何实现自卸载
通过LoadLibraryA加载的DLL begin...end 里已做了需要的处理,完成后需要卸载释放资源。但是执行完并不如此,DLL仍然在调用者的进程里,因此我想让DLL被执行完代码后自动让DLL去FreeLibrary自己。有没有办法解决。调用程序的EXE是没办法改动的。只有让DLL自卸载
[解决办法]
不管LoadLibrary,还是FreeLibrary,都会调用begin...end 里面的代码的,只要判断一下就可以初始化或卸载了。
library MYAPIDLL;
uses
Classes;
{$R *.RES}
procedure DllEntryPoint(dwReason: DWord);
begin
case dwReason of
Dll_Process_Attach: ...初始化()... ;
Dll_Process_Detach: ...卸载()... ;
end;
end;
begin
DllProc := @DllEntryPoint; //该变量是一个全局变量,由它来指—LL的入口及出口函数
DllEntryPoint(Dll_Process_Attach);
end.
[解决办法]
楼主得先找以判断 "DLL被执行完代码后 "这一时刻的方法。
[解决办法]
动态加载,不会出现这种问题
[解决办法]
你这个要求有点不合理
使用Dll要求LoadLibrary和FreeLibrary配对
没有FreeLibrary时,应该被修改的是exe而不是dll
假如exe不FreeLibrary,它就必须得接受进程里多加载一个dll的后果
至于说资源的占用、释放,你完全可以在其它地方实现,
干嘛非要用Dll_Process_Detach?