近日,开发一个项目,需要在资源管理器中双击某个文件类型,会显示对这个文件进行处理的对话框,对话框需要显示成非模式,这样可以不影响在资源管理器中可以进行其它操作,在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不能被释放。
相关推荐
从BIN文件到可烧录程序:深入理解ADI DSP程序读取背后的原理与安全边界
本文深入探讨了ADI DSP程序从BIN文件到可烧录程序的转换原理与安全边界,详细解析了JTAG接口、仿真器工作流程及Flash存储结构。通过Visual DSP++工具,开发者可以理解程序读取的底层机制,同时强调了知识产权保护的重要性,为嵌入式开发提供了实用建议。
【笔记】注入DLL创建窗口闪退的问题
最近无聊在写一个DLL的时候想实现注入DLL出现窗口无奈本人技术太菜,被迷惑了几天,后来翻阅资料才找到希望给刚刚学WIN32编程的朋友提示下,顺便给我自己写个笔记方便以后遇到了能马上查询到创建一个非模态对话框HWND CreateDialogParam(HINSTANCE hlnstancem,LPCTSTR IpTemplateName,HWND hWndParent,DLGPROCIpDial...
常见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...
调用第三方DLL闪退(crash)的原因和解决方法
某项目要调用一个第三方的 Windows 动态库(DLL),这个 DLL 除了一份简单的 API 文档,没有任何参考代码。用 VC++ 写了测试程序,通过 LoadLibrary、GetProcAddress 得到 DLL 中的 API 函数地址进行调用,一开始是按 Release 配置编译,结果调用该 DLL 中的函数可以得到正确结果,但之后总是闪退(也就是 crash),不报任何错。由于没有该 DLL 的源码,无法定位 crash 原因,无法确定是否由于调用参数不正确还是由于该 DLL 本身的 bug
从STM32转战STC32G?逐飞开源库帮你快速上手GPIO、PWM与ADC(避坑指南)
本文详细介绍了从STM32迁移到STC32G32K128的开发实践,重点解析了GPIO、PWM和ADC等基础外设的设计差异,并提供了基于逐飞开源库的高效应用方案。通过对比两种平台的开发工具和操作方式,帮助开发者快速上手STC32G,避免常见陷阱,提升开发效率。
易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试
本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。
在dll中弹出非模态对话框 分享
最近在写视频嵌入的插件,其实就是在dll中去实现exe中需要的视频功能,好处是,可以同时支持多厂家的视频设备。需要做的是制订好exe与dll的接口,然后针对该接口开发出调用各个厂家视频功能的dlls。最常用的功能大概就是视频实时预览了,设计的目标是在dll中弹出一个非模态对话框,其上面显示视频以及必要的控制,如云镜控制、录像抓图、灯光控制等等。之所以要非模态的对话框,是
STM32F0实现数字化SPWM纯正弦波逆变器
这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。
Dll 中创建非模式对话框 报错
AFX_MANAGE_STATE(AfxGetStaticModuleState()); CPanel *dlg=new CPanel(); dlg->Create(IDD_PANEL,parent); dlg->ShowWindow(SW_SHOW); void CWnd::AssertValid() const {
FreeSWITCH彩铃与回铃音区别详解:从183/180信令到mod_da2检测模块
本文深入解析FreeSWITCH中彩铃与回铃音的技术差异,从183/180信令机制到mod_da2智能检测模块的实现原理。通过对比SIP协议中的早期媒体传输、回铃音补偿技术及实战案例,帮助开发者掌握VoIP系统中的关键音频处理技术,提升呼叫系统稳定性和用户体验。
基于CNN的三相故障识别算法及实现(Matlab)
通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。
dll中创建非模式对话框的问题
今天在dll的输出函数中用非模态对话框遇到一个错误,File : dlgcore.cpp,line : 173。经过追踪调试,发现在非模态对话的创建过程中,在查找资源的时候出了问题。 HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG); HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG); 查到的资源句柄hResource为空,即没有查到这个资源
【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen‘s Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。
【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen's Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。
VS2015 MFC DLL调用模式对话框
关于如何创建mfc dll动态链接库以及如何调用在我前面的一篇博客里写的很清楚了,不太清楚的可以去看看,博客地址:VS2015中用C++创建MFC DLL动态库,因此这篇博客里我只讲重点内容。 有的时候我们需要在mfc dll中使用对话框,在对话框里进行一些操作。首先我们在MFC dll的工程的资源视图里添加一个对话框: 然后为这个对话框添加一个对话框类CDialog1,如下图所示: 在MF......
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
无模式对话框的创建与使用(转自VCKBase)
作者:张连成 在编程过程中,对话框经常用到,但对无模式和模式对话框的创建和销毁过程,经常有误解,下面提供一个无模式对话框的例子来剖析无模式对话框的形成: 无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );之后还需要调用BOOL CDialog::ShowWindow( SW_SHOW);进
老版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...
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
DLL中单例模式存在的非模态CPropertySheet对话框在程序关闭时产生内存泄漏
1. 问题描述 在实际编程过程中需要在dll内部提供继承自CPropertySheet的对话框进行参数设置,由于需要在很多地方调用同一个对话框,为了同时只显示一个对话框实例,采用了如下所示的单例实现方法 class CPage1: public CPropertyPage class CPage2: public CPropertyPage class CSettingDlg: publi
在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
dll创建无模式对话框
由资源冲突造成的,可以这样解决 在DllMain函数所在的cpp文件中定义一个全局变量 HINSTANCE g_hInstance; 在DllMain函数的 if (dwReason == DLL_PROCESS_ATTACH) { TRACE0("DOCUSERTOOLS.DLL Initializing!/n"
MFC扩展DLL导出对话框类
MFC扩展DLL导出对话框类 wls(630771620wls@sina.com) 2013年01月14日 (此文为作者原创,任何转载须保持文章完整,并提供引用的链接。) 话说最近北京的空气差极了,居然有毒。去亚马逊上看了一下,PM2.5防护口罩脱销了,在小屋里宅了两天没跟上时代的发展,看来我只能买防毒面具了。 在网上看了一下,关于“dll导出对话框类”的搜索,基本上都是2个
Win32 DLL和MFC DLL 中封装对话框
Win32 DLL和MFC DLL 中封装对话框 分类: 挂挂2007-07-02 12:36 3344人阅读 评论(1) 收藏 举报 现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题。 1.Win32
msvcr110.dll作用丢失原因及7个最新解决方法
这个库文件包含了大量预先编写的函数和资源,用于支持那些使用Visual C++ 2010或与之兼容版本编译的应用程序在运行时所需的环境。标准C/C++库函数:实现了C和C++标准库中定义的函数,如字符串操作函数(strcpy, strcat)、数学函数(sin, cos)、文件操作函数(fopen, fread)等。基本运行时支持:提供了程序运行的基础服务,如内存管理(分配、释放)、输入输出操作、字符串操作、数学运算等。"系统警告:无法加载msvcr110.dll,程序可能无法正常运行。
MFC之对话框创建与销毁总结
主void CMoshiwindowDlg::OnButton1() { // TODO: Add your control notification handler code here CDialogproty dlg; dlg.DoModal(); m_text.SetWindowText(dlg.text); } 子: 1.头文
261



被折叠的 条评论
为什么被折叠?



