AfxGetStaticModuleState( ) 返回模块自身的module state数据块指针。
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))在函数的最开始调用,用于在栈上构造一个AFX_MANAGE_STATE类,并把当前的模块状态指针保存在一个成员变量里面,然后把pModuleState设置成使用AfxGetStaticModuleState( ) 返回的指针;在这个实例对象的析构函数中,对象恢复以前保存的指针。
另一种方法:
// in DLL
void CDLL::ShowDlg(void)
{
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CDialog dlg(IDD_DLL_DIALOG); //打开ID为2000的对话框
dlg.DoModal();
AfxSetResourceHandle(save_hInstance);
}
// in EXE
void CEXE::OnButtonClick()
{
HINSTANCE exe_hInstance = GetModuleHandle(NULL);
HINSTANCE dll_hInstance = GetModuleHandle("SharedDll.dll");
AfxSetResourceHandle(dll_hInstance); //切换状态
ShowDlg();
AfxSetResourceHandle(exe_hInstance); //恢复状态
}