我写了一个DLL窗体(名叫:MyDllForm),想在MyDllForm窗体内用一个按钮(Btn_Exit)退出MyDllForm窗体,回到主窗体中.但是总是出错,代码如下:请高手帮忙?
function show_MyDllForm(hand:thandle;cap:string):boolean;stdcall;
var
MyDllForm:TMyDllForm;
begin
result:=false;
application:=hand;
MyDllForm:=TMyDllForm.Create(hand);
try
MyDllForm.Caption:=cap;
MyDllForm.ShowModal;
result:=true;
finally
MyDllForm.Free;
end;
procedure TMyDllForm.btn_ExitClick(Sender: TObject);
var
h:thandle;
begin
  h:=findwindow('tMyDllForm','我的DLL窗体');
  if hand>0 then
    tMyDllForm(h).Free;
end;
点击btn_exit时总是出错,请各位高手帮忙??请说详细些!

解决方案 »

  1.   

    楼主注意一下你的代码:
    procedure TMyDllForm.btn_ExitClick(Sender: TObject);
    var
    h:thandle;
    begin
    h:=findwindow('tMyDllForm','我的DLL窗体');
    if hand>0 then
    tMyDllForm(h).Free; // xiammy: h是THandle,是一个Windows的窗体资源ID,并不是次窗体的对象事例指针。所以不能强制转换,并调用Free方法。
    end;
      

  2.   

    试试。var
    h:thandle;
    begin
    h:=findwindow('tMyDllForm','我的DLL窗体');
    if h>0 then
    SendMessage(h,WM_CLOSE,0,0);end;
      

  3.   

    楼上的,用sendmessage(h,wm_close,0,0)能把窗体整个从内存中清空吗?
      

  4.   

    可以在form中加入:procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      action:=caFree;
    end;