dll中的子窗口动态调用后如何释放
子窗口建立后show 完后不象是一般窗口的那种showmodal的我们可以在
try
 loadlobrary()
 ......
finally
 Freelibrary  
end;
的finally 中给放掉但是在dll中子窗口建立后根本就停不下来的。
所以我现在没法给它放掉呀。

解决方案 »

  1.   

    你得先判断子窗体已经关闭,再可以释放动态库,所以你上面的代码Finally后释放动态库肯定是不行,可采用的解决方案是在子窗体的OnClose子事件中发一个消息给调用EXE窗体,此时才去释放动态库
      

  2.   

    方法1:{已测试}
       在dll中动态创建form的时候,为该form指定名称,当在程序调用该form的show事件时,会提示错误,这样可以用try ...except...end 语句屏蔽错误.这样起到了只显示一个form的效果
    方法2:{未测试}
       在窗体创建时返回该窗体的handle.在程序中根据此值进行判断操作
      

  3.   

    最好是在dll中导出个function destroyWin,由它去释放你的form!简单方便
      

  4.   

    没有好好看问题~!
    你这说的不是一回事情,
    var Handle:Thandle;
    ..........
    try
        Handle:=loadlobrary()
         ......
    finally
        Freelibrary(Handle); //Unload the DLL. 
    end;
    Freelibrary释放的是这个调用dll的这个连结.而窗体和这个函数没有关系.在dll中该form的close事件中写action:=cafree;就可以在关闭的时候释放了.我上面的回答,以为你是想在该dll form show的时候只显示一次~
      

  5.   

    在动态库中输出一个函数给主程序是来释放动态库中的MDI子窗体是可以的在某些时候是必要的,但不能解决全部问题,比如子窗体在操作过程中由用户关闭的怎么处理呢?作为动态库资源一部分的子窗体没有释放就去释放动态库肯定出错!
      

  6.   

    是这样的我的子窗也是可以放掉的可是这个dll本身是无法放掉的。
    因为我的Freelibrary()没有一个好的地放。