这个函数是加载DLL,并调用DLL中的FORM
Function Showlogin:integer;
var
HDLL:THandle;
loginmain:Tloginmain;
begin
HDLL:=LoadLibrary('login/showlogin.dll');
try
@loginmain:=GetProcAddress(HDLL,'loginmain');
if Assigned(@loginmain) then
loginmain(Application.Handle);
finally
result:=1;
FreeLibrary(HDLL);
end;
end;
在DLL中的form中,我没有特地的去做form的关闭处理,只是close;
我感觉我一次一次的这样调用,好像每次FreeLibrary(HDLL);后,都有很多的资源不能释放掉,大侠指点一下阿

解决方案 »

  1.   

    1。如果显示为模式窗口。
    dll的loginmain函数肯定是先创建这个窗口,然后显示,在显示后面加一个释放就可以了。如
    loginmainvar
      aa : Tform1;
    begin
      .......
      ,,,,,,
      aa := Tform1.create(application);
      try
        aa.showmodal;
      finally
        aa.free
      end;
    end;这样窗体就肯定能释放掉了。  
    2。非模式窗体。
      这个在做dll时要做两个函数来保证窗体可以释放掉
      一个函数用于创建并显示窗体。函数的返回值为窗体的handle;
      一个函数用于释放该窗体,函数的传入参数为句柄。  在dll中加了application.handle := 传入的handle,这句话,就统一了dll和调用程序的application.在调用dll的应用关闭时,所有的窗体都会释放掉,
    实际上这个你不必理会.