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占有的内存及句柄数都增长,如何解决内存增长及句柄数的问题?