我在一个主程序里调用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.   

    改成如下试试如何
    begin
      inherited;
      try
        Action :=caFree;
      //  CloseWindow(p_ParentForm.Handle);
        PostMessage(p_ParentForm.Handle,WM_CLOSE,0,0);
        Self :=nil;    
      except
      end;
    end;
      

  2.   

    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;先释放,然后再置成空
      

  3.   

    错误应该是出在 Application 上
      

  4.   

    错误应该是出在 Application 上
    ??是何概念?
    在inherited并没有什么处理,只有两句:
      Action := caFree;
      FmMainTemplate := nil;
    应该不可能存在问题!现在奇怪的是程序前两次都没问题!可第三次从主程序进入DLL调用DLL里的函数创建窗体时就会出错!