在dll中有一无模式对话框类,由对话框A调用此dll函数来创建并显示它(以下称其为B),B是这样创建的:Create(桌面指针),dll的ExitInstance()中有代码来关闭B。如果窗口A在未销毁(destroywindow)前并且窗口B也未销毁前关闭dll,dll的ExitInstance()中的关闭B的代码可以正常关闭B,dll也顺利被关闭。如果窗口A在OnDestroy中关闭dll,此时窗口B如未销毁则B仍显示在屏幕上,而A已经关闭,程序也被挂起了。为什么会这样呢,如何在A和dll关闭前关闭窗口B?高手帮忙啊。
解决方案 »
- 用火狐下的Activex plugin(npActiveX.dll),怎么我写的dll没反应
- 关于OnCtlColor的一段代码,感觉有问题不知道怎么改
- 如何获取指定对话框中的文本信息
- CFrameWnd的平面效果怎么实现?
- 珠三角有工厂要人的吗
- 发现Windows2003的一个BUG!
- 请问:如何在VC中执行一个DELPHI应用程序,是不是用SHELL,具体怎么用
- 如何用程序模拟人工控制鼠标左键去按桌面上的图标,如“我的电脑”,“我的文档”?
- 求大神指导::怎么样逐一打开一个文件夹中的所有文件?
- 大家进来给我点意见--是去读书还是继续工作 散分
- 或许是字符串处理有问题,或许是注册表读取有问题,总之请你进来看看吧
- 救命啊~~~~
打开:m_hDll = LoadLibraryW(lpDllName);用FreeLibrary(m_hDll)关闭。
B窗口是在DLL的导出函数中创建的。A与B是同一线程,B中有运行另一个工作线程,但在B的OnCancel中有用WaitForSingleObject(m_hThread, INFINITE)等待线程结束。
A窗口关闭后就退出程序,没再运行什么代码,A窗口是程序主窗口。A窗口退出代码:void CTestDlg::OnDestroy()
{
if (m_hDll) FreeLibrary(m_hDll);
if (m_button1)
{
if (IsWindow(m_button1->m_hWnd)) m_button1->DestroyWindow();
delete m_button1;
}
if (m_button2)
{
if (IsWindow(m_button2->m_hWnd)) m_button2->DestroyWindow();
delete m_button2;
}
CMyDlg::OnDestroy();
}