DLL如何实现自卸载 通过LoadLibraryA加载的DLL begin...end 里已做了需要的处理,完成后需要卸载释放资源。但是执行完并不如此,DLL仍然在调用者的进程里,因此我想让DLL被执行完代码后自动让DLL去FreeLibrary自己。有没有办法解决。调用程序的EXE是没办法改动的。只有让DLL自卸载 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不管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; //该变量是一个全局变量,由它来指定DLL的入口及出口函数 DllEntryPoint(Dll_Process_Attach);end. 楼主得先找以判断"DLL被执行完代码后"这一时刻的方法。 楼上都没有理解我的意思Dll_Process_Detach是卸载时执行的方法.我现在需要DLL自动触发卸载,例如,DLL里窗体触发或者其它方式都可以最重要的是“不修改调用程序的源码”,因为调用程序没有FreeLibrary的,因此需要DLL自卸载自己 你这个要求有点不合理使用Dll要求LoadLibrary和FreeLibrary配对没有FreeLibrary时,应该被修改的是exe而不是dll假如exe不FreeLibrary,它就必须得接受进程里多加载一个dll的后果至于说资源的占用、释放,你完全可以在其它地方实现,干嘛非要用Dll_Process_Detach? 因为需要挂载的DLL占用资源太多,原程序又没办法改动只得做了一个专门卸载其它DLL的DLL,里面用了个TIMER用来自动对加载的其他DLL进行卸载。 做两个dll,在Dll_Process_Attach时,一个用来加载资源,一个用来释放资源保留两个dll总好过保留一大堆不过这是没办法的办法,能修改程序最好修改程序 dbgrideg使用access数据库是否字段,关联checkbox问题 dbgrideh合计问题 CSDN现在可以给回答加分吗? VB、DELPHI学习群,欢迎大家进入!! 如何存储数据库 interbase安装完有部分怎么不能用呀 mdi子窗口的界面为什么和设计的时候布局有些不一样啊 怎么让字体变得大些 大家好:如何动态的打印报表,就是说要几个字段打印几个字段!谢意 作一个库存管理的系统,库存应该如何处理?(946) 热烈庆祝[小哈欠]的诞生 求救:关于如何继承退出事件!(控件开发)
Classes;
{$R *.RES}procedure DllEntryPoint(dwReason: DWord);
begin
case dwReason of
Dll_Process_Attach: ...初始化()... ;
Dll_Process_Detach: ...卸载()... ;
end;
end;
begin DllProc := @DllEntryPoint; //该变量是一个全局变量,由它来指定DLL的入口及出口函数
DllEntryPoint(Dll_Process_Attach);
end.
使用Dll要求LoadLibrary和FreeLibrary配对
没有FreeLibrary时,应该被修改的是exe而不是dll假如exe不FreeLibrary,它就必须得接受进程里多加载一个dll的后果至于说资源的占用、释放,你完全可以在其它地方实现,
干嘛非要用Dll_Process_Detach?
用来自动对加载的其他DLL进行卸载。
保留两个dll总好过保留一大堆不过这是没办法的办法,能修改程序最好修改程序