我在一个主程序里调用DLL里面的窗体,当DLL里面的窗体关闭时,要同时关闭主程序里的一个相应的窗体!不知道为什么,当在主程序里运行上面的程序三次以后就会出错?而且是不知名的错误,不知道为什么?当DLL里面的窗体关闭时,同时关闭主程序里的一个相应的窗体,我用的是SENDMESSAG命令,而后改过POSTMESSAGE也会出错?我花了很多时间查问题,很可能出在内存问题上!好象还有资源没释放引起的!比较奇怪的就是第一,二次关闭是正常,可第三次关闭的时候就会出错!面有时候进去时也会出错,提示的大概意思好象是:无效的指针什么的!我急死了!请各位大侠献记献策!程序一部分代码如下:
procedure TFmMainSAD.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  try
    CloseWindow(p_ParentForm.Handle);
    PostMessage(p_ParentForm.Handle,WM_CLOSE,0,0);
    Self :=nil;
    Action :=caFree;
  except
  end;
end;

解决方案 »

  1.   

    你p_ParentForm Close两次干嘛, Close并不等于是Free
      

  2.   

    CloseWindow(p_ParentForm.Handle);我把这个删除了以后,还是会出错啊!
      

  3.   

    procedure TFmMainSAD.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      inherited;
      try
        CloseWindow(p_ParentForm.Handle);
        PostMessage(p_ParentForm.Handle,WM_CLOSE,0,0);
        Action :=caFree;
        Self :=nil;
      except
      end;
    end;
    先释放再置成nil
      

  4.   

    估计你的p_ParentForm是从主程序传给DLL的窗体,这样是有可能出问题!
    我建议你直接传递p_ParentForm.Handle作为参数,保存到p_ParentFormHandleCloseWindow(p_ParentFormHandle);
      

  5.   

    一.试试不要
    Action :=caFree;
    Self :=nil;
    这两句.
    二.DLL句柄是否释放掉?
    三.跟踪一下出错出在哪个具体的位置?
      

  6.   

    试试
    不要从主程序传递"窗体"到DLL(p_ParentForm),
    而是传递"窗体的句柄"(p_ParentForm.Handle)