DLL学习(9)

动态链接到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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值