DLL中创建的非模式对话框不能正常显示原因的解决

VS2019/MFC编程入门之对话框:非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示。 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换。将上一讲中创建的Tip模态对话框改为非模态对话框,让大家看下效果。当功能实现了想要拥有美观的界面可以借助Toolkit Pro进行界面优化。 Xtreme Toolkit Pro:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Comm 阅读详情

近日,开发一个项目,需要在资源管理器中双击某个文件类型,会显示对这个文件进行处理的对话框,对话框需要显示成非模式,这样可以不影响在资源管理器中可以进行其它操作,在HKEY_CLASSES_ROOT中的shell\open\command中用rundll32.exe设置好对应需要调用的动态库函数后,发现在双击文件时,非模式对话框一闪而过,经过对rundll32.exe原理的了解,得知"Rundll32使用LoadLibrary来载入这个指定的DLL,使用GetProcAddress函数来获取函数地址,然后带着这个指定的参数(如果有这个参数的话)去调用函数。当这个函数返回时,Rundll32将卸载这个DLL并退出。"我的这个dll使用VC6.0的向导生成的,由于函数执行完后,动态库所对应的CWinApp实例也得到了释放(CWinApp::ExitInstance()被调用,WM_QUIT被发送给该实例的所有窗口),因此非模式对话框会一闪而过,解决该问题的主要途径是加上消息循环。等对话框关闭后,被调用的动态库函数返回,此时CWinApp::ExitInstance()才被系统被调用。代码如下所示:extern "C" __declspec(dllexport) void Hello( HWND hwnd,// handle to owner window HINSTANCE hinst, // instance handle for the DLL LPTSTR lpCmdLine, // string the DLL will parse int nCmdShow // show state ){if ( strlen(lpCmdLine) == 0 ) return;CMyDlg *mydlg = NULL; mydlg = new CMyDlg;if (mydlg){ mydlg->Create(IDD_DIALOG_MY); mydlg->ShowWindow(SW_SHOW); MSG msg; while (GetMessage(&msg, mydlg->m_hWnd, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); }}} 另外在对话框退出时,需要调用PostQuitMessage(0),以使消息循环结束退出,否则DLL不能被释放。

掌握C#中DLL的创建与调用 在类库项目中,定义公共类和方法需要遵循以下原则:最小化公开接口:仅公开必要的功能,避免过度公开内部实现细节。使用访问修饰符:合理使用publicinternal等访问修饰符,以控制类和成员的可见性。遵循单一职责原则:每个类只负责一项任务,确保类的简单和集中。编写详细的XML文档注释:为公共类、方法和属性编写XML文档注释,以提供必要的使用说明和维护性。例如,定义一个公共类和其公共方法:/// 数据访问类,提供数据获取和操作的方法。 阅读详情

相关推荐

从BIN文件到可烧录程序:深入理解ADI DSP程序读取背后的原理与安全边界

本文深入探讨了ADI DSP程序从BIN文件到可烧录程序的转换原理与安全边界,详细解析了JTAG接口、仿真器工作流程及Flash存储结构。通过Visual DSP++工具,开发者可以理解程序读取的底层机制,同时强调了知识产权保护的重要性,为嵌入式开发提供了实用建议。

weixin_27956639的博客 261

【笔记】注入DLL创建窗口闪退的问题

最近无聊在写一个DLL的时候想实现注入DLL出现窗口无奈本人技术太菜,被迷惑了几天,后来翻阅资料才找到希望给刚刚学WIN32编程的朋友提示下,顺便给我自己写个笔记方便以后遇到了能马上查询到创建一个非模态对话框HWND CreateDialogParam(HINSTANCE hlnstancem,LPCTSTR IpTemplateName,HWND hWndParent,DLGPROCIpDial...

c2unix的专栏 5909

常见js手撕题及算法总结

设计一个lazyMan,实现以下功能: LazyMan(‘Tony’); // Hi I am Tony LazyMan(‘Tony’).sleep(10).eat(‘lunch’); // Hi I am Tony // 等待了10秒… // I am eating lunch LazyMan(‘Tony’).eat(‘lunch’).sleep(10).eat(‘dinner’); // H...

没有名字适合我的博客 3176

调用第三方DLL闪退(crash)的原因和解决方法

某项目要调用一个第三方的 Windows 动态库(DLL),这个 DLL 除了一份简单的 API 文档,没有任何参考代码。用 VC++ 写了测试程序,通过 LoadLibrary、GetProcAddress 得到 DLL 中的 API 函数地址进行调用,一开始是按 Release 配置编译,结果调用该 DLL 中的函数可以得到正确结果,但之后总是闪退(也就是 crash),不报任何错。由于没有该 DLL 的源码,无法定位 crash 原因,无法确定是否由于调用参数不正确还是由于该 DLL 本身的 bug

zhuangwf的专栏 7355

从STM32转战STC32G?逐飞开源库帮你快速上手GPIO、PWM与ADC(避坑指南)

本文详细介绍了从STM32迁移到STC32G32K128的开发实践,重点解析了GPIO、PWM和ADC等基础外设的设计差异,并提供了基于逐飞开源库的高效应用方案。通过对比两种平台的开发工具和操作方式,帮助开发者快速上手STC32G,避免常见陷阱,提升开发效率。

weixin_30316097的博客 528

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 453

在dll中弹出非模态对话框 分享

最近在写视频嵌入的插件,其实就是在dll中去实现exe中需要的视频功能,好处是,可以同时支持多厂家的视频设备。需要做的是制订好exe与dll的接口,然后针对该接口开发出调用各个厂家视频功能的dlls。最常用的功能大概就是视频实时预览了,设计的目标是在dll中弹出一个非模态对话框,其上面显示视频以及必要的控制,如云镜控制、录像抓图、灯光控制等等。之所以要非模态的对话框,是

lionzl的专栏 2595

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

Dll 中创建非模式对话框 报错

  AFX_MANAGE_STATE(AfxGetStaticModuleState());       CPanel   *dlg=new   CPanel();       dlg->Create(IDD_PANEL,parent);       dlg->ShowWindow(SW_SHOW);       void   CWnd::AssertValid()   const     {

carl2380的专栏 824

FreeSWITCH彩铃与回铃音区别详解:从183/180信令到mod_da2检测模块

本文深入解析FreeSWITCH中彩铃与回铃音的技术差异,从183/180信令机制到mod_da2智能检测模块的实现原理。通过对比SIP协议中的早期媒体传输、回铃音补偿技术及实战案例,帮助开发者掌握VoIP系统中的关键音频处理技术,提升呼叫系统稳定性和用户体验。

tree8的博客 348

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 383

dll中创建非模式对话框的问题

 今天在dll的输出函数中用非模态对话框遇到一个错误,File : dlgcore.cpp,line : 173。经过追踪调试,发现在非模态对话的创建过程中,在查找资源的时候出了问题。  HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG);  HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG);  查到的资源句柄hResource为空,即没有查到这个资源

个人开发记录 1413

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen‘s Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen's Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

2401_89898861的博客 1424

VS2015 MFC DLL调用模式对话框

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

Keras深度学习 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

无模式对话框的创建与使用(转自VCKBase)

作者:张连成 在编程过程中,对话框经常用到,但对无模式和模式对话框的创建和销毁过程,经常有误解,下面提供一个无模式对话框的例子来剖析无模式对话框的形成: 无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );之后还需要调用BOOL CDialog::ShowWindow( SW_SHOW);进

长豆角 579

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

在C#创建并使用dll,包括dll静态、非静态以及XML注释

详细dll介绍创建过程以及使用过程在C#中创建dll并添加方法DLL代码片XML注释DLL使用 在C#中创建dll并添加方法 我用的软件是VS 2008,在VS 2008创建项目:File->New->Project 然后进行如下图的项目创建步骤。 图片: 项目创建步骤 DLL代码片 下面为测试DLL 代码片. using System; using System.Collect...

qq_41894426的博客 1769

STM32F407中文手册

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

【VC】DLL文件中添加对话框资源。。

创建“MFC DLL”工程,工程命CTestDll,接下来选择“使用 MFC DLL 共享 DLL”,点击“完成”。 资源工程中,从菜单中选择Insert->Resource,添加“Dialog”, 选择“New”,至此对话框已添加到DLL工程中。 为对话框添加一新类,如:CTestDlg,基类为CDialog。 在TestDll.cpp中添加接口函数: #include "TestDl

shen_wei的专栏 3711

DLL中单例模式存在的非模态CPropertySheet对话框在程序关闭时产生内存泄漏

1. 问题描述 在实际编程过程中需要在dll内部提供继承自CPropertySheet的对话框进行参数设置,由于需要在很多地方调用同一个对话框,为了同时只显示一个对话框实例,采用了如下所示的单例实现方法 class CPage1: public CPropertyPage class CPage2: public CPropertyPage class CSettingDlg: publi

piaobotudou的专栏 1932

在DLL中产生对话框的方法二(MFC Regular DLL)

 http://blog.youkuaiyun.com/hailongchang/archive/2006/12/26/1462316.aspx在MFC Regular Dll 中创建modal对话框    在MFC Regular Dll中创建modal对话框非常简单,Cdialog基类提供有一个方法DoModal(),能够创建一个modal对话框,因此在MFC Regular Dll中创建mo

markman101---神即是道 道法自然 如来 873

dll创建无模式对话框

由资源冲突造成的,可以这样解决         在DllMain函数所在的cpp文件中定义一个全局变量     HINSTANCE   g_hInstance;         在DllMain函数的     if   (dwReason   ==   DLL_PROCESS_ATTACH)     {     TRACE0("DOCUSERTOOLS.DLL   Initializing!/n"

qsycn的专栏 892

MFC扩展DLL导出对话框类

MFC扩展DLL导出对话框类 wls(630771620wls@sina.com) 2013年01月14日 (此文为作者原创,任何转载须保持文章完整,并提供引用的链接。) 话说最近北京的空气差极了,居然有毒。去亚马逊上看了一下,PM2.5防护口罩脱销了,在小屋里宅了两天没跟上时代的发展,看来我只能买防毒面具了。 在网上看了一下,关于“dll导出对话框类”的搜索,基本上都是2个

当蝴蝶在南半球拍了两下翅膀,它就会稍微飞高一些。 7452

Win32 DLL和MFC DLL 中封装对话框

Win32 DLL和MFC DLL 中封装对话框 分类: 挂挂2007-07-02 12:36 3344人阅读 评论(1) 收藏 举报  现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32   DLL和MFC   DLL两个方面来分析并解决这个问题。             1.Win32

anhkgg的专栏 2757

msvcr110.dll作用丢失原因及7个最新解决方法

这个库文件包含了大量预先编写的函数和资源,用于支持那些使用Visual C++ 2010或与之兼容版本编译的应用程序在运行时所需的环境。标准C/C++库函数:实现了C和C++标准库中定义的函数,如字符串操作函数(strcpy, strcat)、数学函数(sin, cos)、文件操作函数(fopen, fread)等。基本运行时支持:提供了程序运行的基础服务,如内存管理(分配、释放)、输入输出操作、字符串操作、数学运算等。"系统警告:无法加载msvcr110.dll,程序可能无法正常运行。

a555333820的博客 1651

MFC之对话框创建与销毁总结

主void CMoshiwindowDlg::OnButton1()  {     // TODO: Add your control notification handler code here     CDialogproty dlg;      dlg.DoModal();      m_text.SetWindowText(dlg.text); }   子: 1.头文

m0_37953415的博客 3095
上一篇: rundll32.exe在注册表中的应用
下一篇: Python and Django
embededvc
博客等级 码龄21年 176粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值