DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
今天刚刚做了一个静态链接到MFC的规则dll,即“Use MFC in a static library“,该dll用来显示一个窗体。然后在一个mfc可执行程序A.exe中调用这个dll文件,可以正常的显示窗体。但后来做了一点小小的改动,即把dll改成动态连接到MFC的dll,即“Use MFC in a shared dll ”,然后在A.exe中调用该dll,结果窗体怎么都不显示。后
  共有三种方法:
  1. 在dll中自动切换,在dll的显示窗体的接口函数中使用AFX_MANAGE_STATE(AfxGetStaticModuleState()),如下:
  void ShowDlg(void)
  {
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  CDialog1 dlg;
  dlg.DoModal();
  }
  2. 在dll中手动切换,如下:
  void ShowDlg(void)
  {
  HINSTANCE save_hInstance = AfxGetResourceHandlehttp://www.100ksw.com/();
  AfxSetResourceHandle(theApp.m_hInstance); //切换为dll
  CDialog1 dlg;
  dlg.DoModal();
  AfxSetResourceHandle(save_hInstance); //还原为可执行程序
  }
  3. 在应用程序中自由切换
  dll中的不做任何改动,如下
  void ShowDlg(void)
  {
  CDialog1 dlg;
  dlg.DoModal();
  }
  而在应用程序中调用该dll的地方作如下改动:
  HINSTANCE hExe=GetModuleHandle(NULL);//获取exe模块句柄
  HINSTANCE hDll=GetModuleHandle("1.dll");//获取dll模块句柄
  AfxSetResourceHandle(hDll); //切换为dll
  ShowDlg();//调用dll中的ShowDlg()函数
  AfxSetResourceHandle(hExe); //还原为可执行程序
posted on   DoubleLi  阅读(455)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示