关于Dll卸载释放内存的问题(问题解决立即给分) ( 积分: 200 )

  • 主题发起人 主题发起人 linjing27
  • 开始时间 开始时间
L

linjing27

Unregistered / Unconfirmed
GUEST, unregistred user!
动态调用Dll时,用FreeLibrary好像不能释放内存,每次调用后内存会增长4kb,不断调用后系统的可用虚拟内存被耗尽,请问有没有方法使每次调用Dll后申请的内存都能完全释放。
 
动态连接库是干嘛用的?
 
处理一些接受到的指令返回string类型的数据
 
有没有人知道怎么解决这个问题啊
 
那就不要用 string, 或者 user 上 sharemem
 
如標准DLL&nbsp;最好不要用&nbsp;string&nbsp;做參數或返回值<br><br>如用&nbsp;COM&nbsp;那就用&nbsp;WideString&nbsp;好了,
 
delphi对内存管理的单元有点问题,&nbsp;最好使用&nbsp;sharemem单元.&nbsp;然后就是避免使用string类型作为传递参数类型.&nbsp;再有,&nbsp;网上有很多关于delphi调用dll的例子,&nbsp;你可以琢磨一下.;
 
Var<br>&nbsp;&nbsp;DLLApp:Tapplication;<br>&nbsp;&nbsp;DLLScr:Tscreen;<br>Procedure&nbsp;proDLL_CreateDllForm(App:TApplication;Scr:TScreen;ChildName,DataConnect,Pss_MenuName,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pss_Cur_UserNo,Pss_Cur_User,Pss_DeptCode,Pss_DeptName,Pss_ModuleName:shortstring);<br>Begin<br>&nbsp;&nbsp;application&nbsp;:=&nbsp;app;<br>&nbsp;&nbsp;screen&nbsp;:=&nbsp;scr;<br>&nbsp;&nbsp;{......}<br>end;<br>procedure&nbsp;ExitDLL(DwReason:&nbsp;Dword);//定义释放dll过程<br>begin<br>&nbsp;&nbsp;if&nbsp;DwReason&nbsp;=&nbsp;DLL_PROCESS_DETACH&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Application&nbsp;:=&nbsp;DLLApp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Screen&nbsp;:=&nbsp;DLLScr;<br>&nbsp;&nbsp;end;<br>end;<br>exports<br>&nbsp;&nbsp;proDLL_CreateDllForm;<br>begin<br>&nbsp;&nbsp;DLLApp:=&nbsp;Application;<br>&nbsp;&nbsp;DLLScr:=&nbsp;screen;<br>&nbsp;&nbsp;DllProc&nbsp;:=&nbsp;@ExitDLL;//释放DLL模块<br>end
 
将所有string类型改成pchar类型就可解决
 
最好不要用string来传递参数
 
lifu888的就是答案!
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=28255
 
多人接受答案了。
 
后退
顶部