Dialog A,有button btnA;
3个dll对话框,DllB,DllC,DllD;
点击btnA,调用DllB。DllB调用DllC,DllD,C,D以子窗口的形式显示在B中。DllB导出函数:
ShowDlg()
{
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CDllB dlg;
dlg.DoModal();
AfxSetResourceHandle(save_hInstance);
}DllC导出函数(DllD导出函数与DllC导出函数一样):
ShowDlg(CPoint point, CWnd *pWnd)
{
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
pDlg = new CCopyB;
bSuccess = pDlg->Create(IDD_DLG_COPYB, pWnd);
pDlg->SetWindowPos(NULL, point.x, point.y, 0, 0, SWP_NOSIZE);
AfxSetResourceHandle(save_hInstance);
}
Destroy()
{
if(pDlg->GetSafeHwnd())
{
pDlg->DestroyWindow();
delete pDlg;
}
}btnA点击事件实现如下:
m_hDll = ::LoadLibrary("DllB.dll");
if (m_hDll == NULL)
{
AfxMessageBox("Failed load DLL");
return ;
}
m_lpFunShow = (lpFunShowDlg)::GetProcAddress(m_hDll, "ShowDlg");
if (m_lpFunShow == NULL)
{
AfxMessageBox("Failed load functions");
return ;
}
m_lpFunShow();
::FreeLibrary(m_hDll);DllB调用DllC,DllD在OnInitDialog()中完成:
m_lpFunShowDlg[0](TRUE); // DllC
m_lpFunShowDlg[1](FALSE); // DllD
在DllB的DestroyWindow()函数中调用DllC,DllD的Destroy()函数和::FreeLibrary()函数。现在的问题是:点击btnA,关掉DllB,重复操作,但不关掉Dialog A。用任务管理器查看Dialog A占有的内存及句柄数都增长,如何解决内存增长及句柄数的问题?
3个dll对话框,DllB,DllC,DllD;
点击btnA,调用DllB。DllB调用DllC,DllD,C,D以子窗口的形式显示在B中。DllB导出函数:
ShowDlg()
{
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CDllB dlg;
dlg.DoModal();
AfxSetResourceHandle(save_hInstance);
}DllC导出函数(DllD导出函数与DllC导出函数一样):
ShowDlg(CPoint point, CWnd *pWnd)
{
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
pDlg = new CCopyB;
bSuccess = pDlg->Create(IDD_DLG_COPYB, pWnd);
pDlg->SetWindowPos(NULL, point.x, point.y, 0, 0, SWP_NOSIZE);
AfxSetResourceHandle(save_hInstance);
}
Destroy()
{
if(pDlg->GetSafeHwnd())
{
pDlg->DestroyWindow();
delete pDlg;
}
}btnA点击事件实现如下:
m_hDll = ::LoadLibrary("DllB.dll");
if (m_hDll == NULL)
{
AfxMessageBox("Failed load DLL");
return ;
}
m_lpFunShow = (lpFunShowDlg)::GetProcAddress(m_hDll, "ShowDlg");
if (m_lpFunShow == NULL)
{
AfxMessageBox("Failed load functions");
return ;
}
m_lpFunShow();
::FreeLibrary(m_hDll);DllB调用DllC,DllD在OnInitDialog()中完成:
m_lpFunShowDlg[0](TRUE); // DllC
m_lpFunShowDlg[1](FALSE); // DllD
在DllB的DestroyWindow()函数中调用DllC,DllD的Destroy()函数和::FreeLibrary()函数。现在的问题是:点击btnA,关掉DllB,重复操作,但不关掉Dialog A。用任务管理器查看Dialog A占有的内存及句柄数都增长,如何解决内存增长及句柄数的问题?
解决方案 »
- 子对话框消息事件处理没反应????????
- 为什么DDRAW 全屏出错,DirectDraw SetCooperativeLevel error!
- Visual Assist 换新版本后 颜色设置失灵了!
- 开发C/S软件使用RPC还是Socket比较好?
- 怎么在Datagrid上显示小图标?
- 怎样在线播放存放在服务器上的视频?
- ADO的连接????????????????
- 请问如何动态建立有3D边框的控件?
- 怎样实现数据库的转换?
- 《Visual C++ 技术内幕》第四版 debug....
- [再次100分]顶帖即送分~~GOOGLE TALK的开源码无错测试后需要调用执行文件!有谁知道!!
- 程序异常的问题,我是初学者,请大虾指教,谢谢!
allocated by LoadLibraryA in dllinit.cpp (505), HANDLE:0x61BE0000
allocated by GlobalAddAtomA in wincore.cpp (600), HANDLE:0x0000C024
allocated by SetPropA in wincore.cpp (597), HANDLE:0x5F4AF788