不好意思 我没看清楚! 你在窗体关闭时 procedure TfrmIC_Tsam.FormClose(Sender: TObject; var Action: TCloseAction); begin frmIC_Tsam:=nil; end;
with TForm1.Create(nil) do begin try ShowModal; finally Free; end; end; procedure TfrmIC_Tsam.FormClose(Sender: TObject; var Action: TCloseAction); begin frmIC_Tsam:=nil; end;恩,楼上的,好像就可以了。。
我的代码如下,请大家指教应该如何修改???//======下面是主程序调用代码========= procedure TfrmMain.mi_inDLLClick(Sender: TObject); var DLLHandle: THandle; DLLSub: InvokeDLLForm;begin DLLHandle := LoadLibrary('prjDLL.dll'); if DLLHandle <> 0 then begin @DLLSub := GetProcAddress(DLLHandle, 'CreateDLLForm'); if Assigned(DLLSub) then begin DLLForm := DLLSub(Application, Screen); end; end; end;//=======下面是DLL中代码============= var DLLApp: TApplication; DLLScr: TScreen; function CreateDLLForm(App: TApplication; Scr: TScreen):TForm; var ptr:PLongInt; begin Application := App; Screen := Scr; Application.CreateForm(TfrmDLLForm, frmDLLForm); result:=frmDLLForm; end;procedure ExitDLL(Reason: Integer); begin if Reason = DLL_PROCESS_DETACH then begin Application := DLLApp; Screen := DLLScr; end; end; exports CreateDLLForm;begin DLLApp := Application; DLLScr := Screen; DLLProc := @ExitDLL;end.
DLL 调用完成后 DLLForm.Close;窗体加个 procedure TfrmDLLForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
try
Form1.Show() ;
finally
Form1.Free ;
Form1 := nil ;
end;
try
Form1.Show() ;
finally
Form1.Free ;
Form1 :=nil ;
end;
with TForm1.Create(nil) do
begin
try
ShowModal;
finally
Free;
end;
end;
你这样窗体刚被创建就释放了,没有任何意义。TO:kampan
你说的是模态窗体,这样可以,但我问的是非模态窗体。
不好意思 我没看清楚!
你在窗体关闭时
procedure TfrmIC_Tsam.FormClose(Sender: TObject; var Action: TCloseAction);
begin
frmIC_Tsam:=nil;
end;
begin
try
ShowModal;
finally
Free;
end;
end;
procedure TfrmIC_Tsam.FormClose(Sender: TObject; var Action: TCloseAction);
begin
frmIC_Tsam:=nil;
end;恩,楼上的,好像就可以了。。
procedure TfrmMain.mi_inDLLClick(Sender: TObject);
var
DLLHandle: THandle;
DLLSub: InvokeDLLForm;begin
DLLHandle := LoadLibrary('prjDLL.dll');
if DLLHandle <> 0 then
begin
@DLLSub := GetProcAddress(DLLHandle, 'CreateDLLForm');
if Assigned(DLLSub) then
begin
DLLForm := DLLSub(Application, Screen);
end;
end;
end;//=======下面是DLL中代码=============
var
DLLApp: TApplication;
DLLScr: TScreen;
function CreateDLLForm(App: TApplication; Scr: TScreen):TForm;
var
ptr:PLongInt;
begin
Application := App;
Screen := Scr;
Application.CreateForm(TfrmDLLForm, frmDLLForm);
result:=frmDLLForm;
end;procedure ExitDLL(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DLLApp;
Screen := DLLScr;
end;
end;
exports
CreateDLLForm;begin
DLLApp := Application;
DLLScr := Screen;
DLLProc := @ExitDLL;end.
DLLForm.Close;窗体加个
procedure TfrmDLLForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
關閉dll窗體後,還要釋放dll所占用的空間?
可以這樣:
1、在一個單元裡聲明 WM_FreeMe = WM_USER + 100,主程序和dll程序分別引用這個單元;
2、在主程序寫一個該消息處理函數函數
begin
FreeLibrary(DLLHandle[msg.lParam]);
end;
3、sendmessage(主窗.handle,WM_FreeMe,nil,Pchar(dll名稱));
4、定義DLLHandle數組,可以這樣:
MaxDllNum=50;//具體數量根據實際修改
const
dll名稱1=0;
dll名稱2=1;
5、調用dll時可以這樣:
DLLHandle[prjDLL] := LoadLibrary('prjDLL.dll');