主窗体调用dll窗体,dll窗体关闭后,如何释放Dll文件!(100)

  • 主题发起人 主题发起人 saku0819
  • 开始时间 开始时间
S

saku0819

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗体调用dll窗体,dll窗体关闭后,如何释放Dll文件!问题是我有一个主窗体,子窗体都封装成了DLL窗体,动态加载DLL窗体的,因为调用DLL窗体都是以ShowMode的方式调用的,所以,我想在关闭窗体后,立即对所封装的DLL窗体的DLL文件进行FreeLibrary()!主窗体没有设置关闭Dll窗体的方法,显然DLL窗体只能通过自身去关闭,在DLL窗体的onClose()事件时向host发送消息这显然过早,在Dll窗体的onDestory事件向host发送消息,主窗体接收不到。而我又不想加Timer,有什么办法可以释放DLL呢》?
 
如果是动态加载的话,FreeLibrary(Handle); 如果是静态加载的话,最后程序关闭时释放~~
 
通过回调函数可以完成。即在DLL中定义一个过程变量,该变量为指向一个过程的变量,主程序中定义过程体,调用DLL后,通过某种方式,将主程序中的过程地址赋值给DLL中的变量;当DLL窗体关闭后,调用该变量指向的函数即可。----------或者通过发送windows消息给主程序,主程序接收到消息后,调用该函数。
 
zxia能不能给个具体的例子呢??
 
调用时都得到窗口句柄了,还要用回调函数去完成,找事做:1.静态加载:调用程序关闭时自动释放,不过最好程序关闭时有释放类的动作。2.动态加载:以经有DLL的句柄了,还要去做回调.多此一举.在调用程序中释放类的动作,然后freelibary(DLL句柄)
 
2.动态加载:以经有DLL的句柄了,还要去做回调.多此一举.在调用程序中释放类的动作,然后freelibary(DLL句柄) ---这句话的前提是你要知道在什么时机来调用freelibary的操作很多种方法,回调是其中一种,也可以直接发消息
 
FreeLibrary(Handle);
 
问题是我有一个主窗体,子窗体都封装成了DLL窗体,因为调用DLL窗体都是以ShowMode的方式调用的,所以,我想在关闭窗体后,立即对所封装的DLL窗体的DLL文件进行FreeLrary()!主窗体没有设置关闭Dll窗体的方法,显然DLL窗体只能通过自身去关闭,在DLL窗体的onClose()事件时向host发送消息这显然过早,在Dll窗体的onDestory事件向host发送消息,主窗体接收不到。而我又不想加Timer,有什么办法可以释放DLL呢》?
 
如果返回是个窗口类,那可以将将调用窗口showmodal方法放在动态调用DLL方法中。即在获得函数地址之后。如不是,可以将调用的ShowModal直接放在DLL方法中。
 
虽然没解决,也只能结贴了
 
如果在Dll中有动态创建的控件的话在释放Dll之前必须关闭或者释放要不然会出错的
 
后退
顶部