我写了一个带FORM的DLL,放到主程序下面被调用,当关闭主程序后,资源管理器中主程序仍然在运行,需要在资源管理器里再将主程序关闭,为什么会出现这种情况,是因为我DLL里有对象没有释放掉?   我是这么写的:     frmTest := nil;
    try
     frmTest := TfrmTest .Create(nil);
     frmTest.ShowModal;
    finally
     FreeAndNil(frmTest);
    end;
  

解决方案 »

  1.   

    关闭时干吗了,dll是否释放,是否执行了死循环
      

  2.   

    DLL是静态调用还是动态加载,程序退出时是如何处理的
      

  3.   

    from上显示的一张报表,用QUICKREPORT做的,frmTest.ShowModal 应该改为frmTest.QuickRep1.Preview;
    调用完应该走 finally
                 FreeAndNil(frmTest);
                end;
    主程序的代码我是看不见的,
    是动态调用
      

  4.   

    如果我没有frmTest := TfrmTest .Create(nil);
    而是frmTest := nil; 接着直接FreeAndNil(frmTest);这样是不对的吧
      

  5.   

      
      try
        if not Assigned(frmTest) then frmTest := TfrmTest .Create(nil);
        frmTest.ShowModal;
      finally
        FreeAndNil(frmTest);
      end;
      这样好些。
      

  6.   

    谢谢!
    frmTest := nil; 
    FreeAndNil(frmTest);中间没有Create,会有问题吗
      

  7.   

    关键不是这点儿代码,还有主程序调用dll那里,看你是怎么写的……
      

  8.   

    不会有问题, FreeAndNil 函数内部自己也会判断处理
      

  9.   


    Application.createForm 第一个建立的FORM是哪一个?
      

  10.   

    1、ShowMadal改为Show
    2、在frmTest OnClose下写代码释放frmTest内所有资源
    3、在frmTest OnClose下Action:=CaFree;三个方法,我没测过,你自己试一下,测完记得把结果发上来
      

  11.   

    我没有用ShowMadal,因为from上显示的是一张报表,用QUICKREPORT做的,所以我直接用frmTest.QuickRep1.Preview;
      

  12.   

    dll应该没问题,可能是别的程序的问题吧。