动态链接到MFC的规则DLL资源同名问题解决:
1)在DLL接口函数中使用:AFX_MANAGE_STATE(AfxGetStaticModuleState());
2)在DLL接口函数中使用:AfxGetResourceHandle(); AfxSetResourceHandle(HINSTANCE xxx);
用法:
void ShowDlg(void)
{
//状态变更
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CDialog dlg(IDD_DLL_DIALOG);//打开ID为2000的对话框
dlg.DoModal();
//状态还原
AfxSetResourceHandle(save_hInstance);
}
方法1只能在DLL接口函数退出的时候才会恢复模块句柄,方法2则能灵活设置其句柄
3)由应用程序自身切换
void CSharedDllCallDlg::OnCalldllButton()
{
//方法3:由应用程序本身进行状态切换
//获取EXE模块句柄
HINSTANCE exe_hInstance = GetModuleHandle(NULL);
//或者HINSTANCE exe_hInstance = AfxGetResourceHandle();
//获取DLL模块句柄
HINSTANCE dll_hInstance = GetModuleHandle("SharedDll.dll");
AfxSetResourceHandle(dll_hInstance); //切换状态
ShowDlg(); //此时显示的是DLL的对话框
AfxSetResourceHandle(exe_hInstance); //恢复状态
//资源模块恢复后再调用ShowDlg
ShowDlg(); //此时显示的是EXE的对话框
}
方法3中的Win32函数GetModuleHandle可以根据DLL的文件名获取DLL的模块句柄。如果需要得到EXE模块的句柄,
则应调用带有Null参数的GetModuleHandle
1)在DLL接口函数中使用:AFX_MANAGE_STATE(AfxGetStaticModuleState());
2)在DLL接口函数中使用:AfxGetResourceHandle(); AfxSetResourceHandle(HINSTANCE xxx);
用法:
void ShowDlg(void)
{
//状态变更
HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CDialog dlg(IDD_DLL_DIALOG);//打开ID为2000的对话框
dlg.DoModal();
//状态还原
AfxSetResourceHandle(save_hInstance);
}
方法1只能在DLL接口函数退出的时候才会恢复模块句柄,方法2则能灵活设置其句柄
3)由应用程序自身切换
void CSharedDllCallDlg::OnCalldllButton()
{
//方法3:由应用程序本身进行状态切换
//获取EXE模块句柄
HINSTANCE exe_hInstance = GetModuleHandle(NULL);
//或者HINSTANCE exe_hInstance = AfxGetResourceHandle();
//获取DLL模块句柄
HINSTANCE dll_hInstance = GetModuleHandle("SharedDll.dll");
AfxSetResourceHandle(dll_hInstance); //切换状态
ShowDlg(); //此时显示的是DLL的对话框
AfxSetResourceHandle(exe_hInstance); //恢复状态
//资源模块恢复后再调用ShowDlg
ShowDlg(); //此时显示的是EXE的对话框
}
方法3中的Win32函数GetModuleHandle可以根据DLL的文件名获取DLL的模块句柄。如果需要得到EXE模块的句柄,
则应调用带有Null参数的GetModuleHandle