exe调用dll中的对话框防资源冲突解决之道

进程防止杀死KProtectProcess.dll.rar 用户无法在任务管理器进程中杀程序。 项目中引用KProtectProcess.dll 然后将NKCore.dll放在与KProtectProcess.dll同级目录。 立即下载

在编写MFC应用程序时,有时我们希望将对话框封装在dll动态库中。但当exe调用dll中对话框时:

程序首先检测exe中的资源如果存在对应的对话框ID,那么dll中的对话框将采用exe中的资源进行创建生成对话框,这样就违背了我们的意愿。

 

1)下面情况可以正确调用dll工程中对话框:

在exe工程资源中对话框ID为

#define IDD_EXE_DIALOG                     5000

在dll工程中对话框ID为

#define IDD_DLL_DIALOG                     5001

2)下面情况可以错误调用了EXE工程中对话框:

在exe工程资源中对话框ID为

#define IDD_EXE_DIALOG                     5000

在dll工程中对话框ID为

#define IDD_DLL_DIALOG                     5000

 

对话框ID都是Visual Studio自动生成的,人工修改ID,到达资源不冲突,对于小工程来说还能忍受。但对于几千个对话框,甚至上万的对话框资源来说也是一件麻烦的事。MFC提供了下面两个函数,于是我们只要在创建对话框之前对切换资源句柄即可。

// 获取当前资源模块句柄

HINSTANCE AFXAPI AfxGetResourceHandle();

// 设置当前资源模块句柄

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

 

于是在dll工程中对需要导出的对话框重载DoModal()函数

  1. INT_PTR CDllDialog::DoModal()  
  2.   
  3. {  
  4.   
  5.  // 获取老句柄   
  6.  HINSTANCE old_hInstance = AfxGetResourceHandle();  
  7.   
  8.   // 获取动态库实例   
  9.   
  10.  HINSTANCE dll_hInstance = GetModuleHandle(_T("DialogDll.dll"));  
  11.   
  12.   // 设置资源模块句柄为动态库资源句柄   
  13.   
  14.  AfxSetResourceHandle(dll_hInstance);  
  15.   
  16.    // 调用CDialog::DoModal()函数   
  17.   
  18.  INT_PTR ptr = CDialog::DoModal();  
  19.   
  20.    // 还原资源句柄   
  21.   
  22.  AfxSetResourceHandle(old_hInstance);  
  23.   
  24.  return ptr;  
  25.   
  26. }  
INT_PTR CDllDialog::DoModal()

{

 // 获取老句柄
 HINSTANCE old_hInstance = AfxGetResourceHandle();

  // 获取动态库实例

 HINSTANCE dll_hInstance = GetModuleHandle(_T("DialogDll.dll"));

  // 设置资源模块句柄为动态库资源句柄

 AfxSetResourceHandle(dll_hInstance);

   // 调用CDialog::DoModal()函数

 INT_PTR ptr = CDialog::DoModal();

   // 还原资源句柄

 AfxSetResourceHandle(old_hInstance);

 return ptr;

}

 

在exe应用程序中添加菜单响应事件:

  1. // CTestDialogDoc 命令   
  2.   
  3. #include"DllDialog.h"   
  4.   
  5. #include "ExeDialog.h"   
  6.   
  7. void CTestDialogDoc::OnTest()  
  8.   
  9. {  
  10.   
  11.  // TODO: 在此添加命令处理程序代码   
  12.   
  13.  CDllDialog dlldlg;  
  14.   
  15.  dlldlg.DoModal();  
  16.   
  17.  CExeDialog exedlg;  
  18.   
  19.  exedlg.DoModal();  
  20.   
  21. }  

 

 

 

http://blog.youkuaiyun.com/zhouschina/article/details/11950707
C# 禁止结束进程,保护进程不被结束(源代码) C#,保护进程,通过VisualStudio.NET2005平台,控制系统不能结束自身进程,控制系统不能结束指定进程,已经生成了一个动态链接库,方便调用,(C#工程源代码),具体内容访问:http://blog.youkuaiyun.com/kangkanglx/archive/2010/06/25/5692984.aspx 立即下载

相关推荐

C#/C++保护自身进程无法被任务管理器结束3.0版

V3.0版:双击exe(64bit的)可测试,若要编译32位的记得修改解决方案平台,然后再编译,这点相信大神们肯定清楚。核心代码是C++完成,C#调用dll实现了对C#进程的保护。在XP、Win7 32和64系统下测试通过。可参见我的博客。 限制了动态调分

MFC防止资源冲突的简单方法

MFC防止资源冲突的简单实现方法。

LiEddy的博客 753

csharp.rar_KProtectProcess_c#保护进程_c#异常终止_c#的Socket终止_保护进程

功能强大的保护进程不被终止,无法在任务管理器中终止,并且360也无法操作

7.VC(custom)-解决DLL和主调程序的资源冲突及如何使用Dll的资源

DLL资源冲突 如何使用DLL的资源

hgy413的专栏 5688

KProcessMon_KProcess_进程监视工具_监视内存_ProcessMonitor_

内核级进程监视工具,类似processmonitor,运行后系统会缓慢卡顿,关闭后正常,比processmonitor增强了进程内存操作,模块加载,敏感操作等功能。

君正T31x metartc集成测试

metartc为国内杨大侠部分开源的一款用于嵌入式领域webrtc库,它与谷歌官方webrtc相比,编译到君正平台的可执行文件仅有5M即可实现webrtc的通信。1. 目前实现的是基于开源版v5.0-b0版本做的简单修改,官方的好几个版本都多少缺点东西,我这里给整理了一下。目前是局域网连接的webrtc,后续尝试走stun和turn试一下NAT穿越的效果。

fsmpeg的博客 3157

VS2015 MFC DLL调用模式对话框

关于如何创建mfc dll动态链接库以及如何调用在我前面的一篇博客里写的很清楚了,不太清楚的可以去看看,博客地址:VS2015中用C++创建MFC DLL动态库,因此这篇博客里我只讲重点内容。 有的时候我们需要在mfc dll中使用对话框,在对话框里进行一些操作。首先我们在MFC dll的工程的资源视图里添加一个对话框: 然后为这个对话框添加一个对话框类CDialog1,如下图所示: 在MF......

Keras深度学习 1万+

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 270

VS2015 MFC DLL调用非模式对话框

在我的VS2015 MFC DLL调用模式对话框这篇博客中,写了如何在mfc dll中调用模式对话框,那么如何调用非模式对话框了。如果我们直接把openDialog函数中调用模式对话框的代码改为调用非模式对话框的代码,如下图所示: 代码如下: //编写mfc dll函数的实现 int _stdcall openDialog() { //AFX_MANAGE_STATE这句代码是用于模块切换时的......

Keras深度学习 1万+

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1524

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 101

引用dll导致的资源id冲突解决方法

<br />产生这个问题的根源在于应用程序与MFC规则DLL共享MFC DLL(或MFC扩展DLL)的程序总是默认使用EXE的资源,我们必须进行资源模块句柄的切换,其实现方法有三:<br />  方法一 在DLL接口函数中使用:<br />AFX_MANAGE_STATE(AfxGetStaticModuleState());<br />  我们将DLL中的接口函数ShowDlg改为:<br />void ShowDlg(void)<br />{ <br />//方法1:在函数开始处变更,在函数结束时恢复<

lala_achun的专栏 3973

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 334

MFC资源冲突解决方法

AFX_MANAGE_STATE(AfxGetStaticModuleState())   先看一个例子: 1、创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源。指定该对话框ID如下:              #define IDD_DLL_DIALOG 2000 2、创建一个基于对话框的mfc应用程序,它包含两个对话框资源,IDD_UI_DIA

凨 2051

Camera tuning flow相机调试流程

相机调试流程分为三大模块:ProcessRaw处理原始数据(黑电平校正、阴影校正),3A实现自动控制(曝光/对焦/白平衡),ISP进行图像精加工(伽马校正、锐化降噪、色彩处理)。三个阶段环环相扣,前阶段为后阶段提供基础,最终输出画质优良且风格化的图像。

weixin_64706696的博客 1229

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1194

福昕 PDF 阅读器 phc.dll/phc64.dll 与资源管理器右键冲突解决方法

福昕 PDF 阅读器 phc.dll/phc64.dll 与资源管理器右键冲突解决方法

m0_56352298的博客 1514

tsfknn 预测R语言中的时间序列

rolling参数应该设置为FALSE,这使得最后的18个观测值成为测试集,其余的作为训练集;如果我们将rolling参数设置为默认值TRUE,那么测试集就不会是一个恒定的向量。lag 滞后参数表示时间序列数据的滞后值。在这个例子中,由于我们的时间序列数据是月度的,我们将参数设置为1:12。作为药品福利计划的一部分,澳大利亚健康保险委员会记录的属于ATC代码A10的产品的每月政府支出(百万美元)。我们将使用tsfknn包,它可以用来预测R语言中的时间序列。格式:ts类别的月度时间序列。

Mrrunsen的博客 323

MFC DLL资源动态切换

文章地址: http://blog.youkuaiyun.com/segen_jaa/article/details/7860404 在MFC使用过程中,遇到DLL资源与主EXE资源冲突问题。 出现这样的Bug,一时无从下手。 报错位置在核心代码中dlgcore.cpp。 [cpp] view plaincopy BOOL

netanimals的专栏 1122

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Windows进程与模块深度解析:从系统助手到核心DLL的幕后世界

本文深入解析Windows进程与模块的幕后世界,从系统助手sihost.exe到核心DLL如KERNEL32.DLL的运作机制。通过实战案例和排查指南,帮助用户识别异常进程、解决DLL冲突,并优化系统性能。特别关注svchost.exe等关键系统进程的资源管理,提升故障排查效率。

weixin_30536861的博客 331

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

1.2 现代可执行程序生态(.exe, .dll, .sys等)

摘要:现代可执行程序生态以PE/COFF格式为基础,包含.exe(用户级入口)、.dll(动态链接库)、.sys(内核驱动)等核心类型,通过模块化设计实现资源共享与功能分层。.dll依赖导出/导入表实现动态链接,存在DLL劫持等安全隐患;.sys直接操作硬件,需数字签名验证。工具(如Dependency Walker)可分析模块依赖,.NET程序集则通过IL代码实现跨平台。安全机制包括ASLR、签名校验等,但面临DLL劫持、驱动漏洞等威胁。该生态以统一格式、层级化权限和动态扩展性为核心特征。

勤奋的码农 1042

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MFC多个dll同时操作时导致资源出错问题

在MFC使用过程中,遇到DLL资源与主EXE资源冲突问题。 出现这样的Bug,一时无从下手。 报错位置在核心代码中dlgcore.cpp。 [cpp] view plaincopy BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleCh

dearm23的博客 1614

VS2022实战:C#窗口程序转DLL的完整避坑指南(附调用示例)

本文详细介绍了在VS2022环境下将C#窗口程序封装为DLL的完整流程,包括核心原理、项目转换步骤、常见问题解决方案及高级集成技巧。特别针对界面程序转DLL过程中的7个关键避坑点进行深入解析,并附有实际调用示例,帮助开发者提升模块复用性和降低项目耦合度。

zzz56的博客 336
上一篇: 如何使用VC6编译sqlite3源码生成动态链接库(版本:sqlite-source-3_6_23_1)
下一篇: 在DLL中产生对话框的方法一(Win32 DLL)
embededvc
博客等级 码龄21年 176粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值