MFC-创建MFC图形界面dll
创建MFC图形界面dll
概述:
利用MFC的DLL框架,制作带有图形界面的dll,可以实现很多功能。
流程:

选择静态链接MFC DLL:以免有的库没有。

采用该框架创建的MFC,会自动生产一个MFC应用程序实例,但是我们还要添加一个图形界面,不然为啥不直接用DLL,而用MFC的DLL呢。
添加对话框:
右键项目,然后添加对话框资源:


右键该对话框给其添加一个类,不然的话只是一个界面,没有真正的引用它。

输入类名会自动生成相关文件:

注:这里如果添加类时,采用的是CDialogEx作为基类,需要在对应的对话框头文件中添加"afxdialogex.h头文件,因为VS不会自动添加。"
在MFC主函数中使用对话框:
MFC的正常框架是只有一个theApp。
前面我们创建了对话框类,但是还没有调用它,所以需要在MFC的theApp中调用该对话框。
在项目中对应的MfcDllTest1.cpp中添加以下代码:

#include"MfcTestDialog.h"
//使用对话框:
MfcTestDialog* pMfcTestDialog = NULL;
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
if (!pMfcTestDialog)
pMfcTestDialog = new MfcTestDialog();
pMfcTestDialog->DoModal();
delete(pMfcTestDialog);
FreeLibraryAndExitThread(theApp.m_hInstance, 0X0);
}
BOOL CMfcDllTest1App::InitInstance()
{
CWinApp::InitInstance();
::CreateThread(NULL, NULL, ThreadProc, NULL, NULL, NULL);//新添加
return TRUE;
}
解释一下这几行代码的原因:
在InitInstance()中创建线程是以免dll中创建模态对话框卡住。
MfcTestDialog* pMfcTestDialog = NULL;//创建类实例变量
DWORD WINAPI ThreadProc(LPVOID lpParameter)//线程函数
{
if (!pMfcTestDialog)
pMfcTestDialog = new MfcTestDialog();
pMfcTestDialog->DoModal();//调用模态对话框
delete(pMfcTestDialog);//关闭对话框后,删除该变量
FreeLibraryAndExitThread(theApp.m_hInstance, 0X0);//删除该dll模块,并退出线程
}
测试代码:
生成dll后,随便注入到一个进程中查看是否有对话框生成。
(注:这里我生成的是x64的dll,需要注入到x64进程)
这里我注入到了windows的记事本进程中:

结果和我们预期一样。
MFC-创建MFC图形界面dll的更多相关文章
- 第六次作业——利用MFC实现计算器图形界面以及简单四则运算表达式批处理
		参考资料: 1.MFC响应键盘 2.计算器实例 3.MFC文件对话框 4.MFCUpdateData()函数的使用 5.MFC教程 6.wi ... 
- 创建Win32图形界面应用程序
		没有什么比创建一个Win32图形界面应用程序能让Win32汇编初学者更兴奋的了! 然而,对于像我这样没有代码便会陷入困境的人来说,看到下面的代码总能让人为之一振,百余行的代码使得Win32GUI编程并 ... 
- FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
		继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作最后一篇,主要是想学一下 MFC 创建和配置. 一.创建 MFC 工程 文件->新建->项目->Visual ... 
- 学习MFC创建界面
		原始学习文章地址: http://blog.csdn.net/chenyusiyuan/article/details/4744097 一.创建MFC 首先创建一个MFC对话框应用程序(Dialog- ... 
- 结对项目——图形界面实现与dll动态链接
		先来一发软件截图~~~ 生成题目的界面 测评界面 第三块本来准备做一个文件历史记录的界面,但是由于时间不够,暂时还没做完. 图形界面的设计与实现 由于对传统的对话框风格不太满意,所以这次作业的图形界面 ... 
- [ActiveX]使用VS2010创建MFC ActiveX工程项目
		ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能队列运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括web网页,应用程序窗体等等. ActiveX控 ... 
- C++  使用VS2010创建MFC ActiveX工程项目
		1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ... 
- c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
		1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ... 
- 【VS开发】使用VS2010创建MFC ActiveX工程项目
		1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ... 
随机推荐
- MySQL客户端工具的使用与MySQL SQL语句
			MySQL客户端工具的使用 1.MySQL程序的组成 客户端 mysql:CLI交互式客户端程序 mycli:CLI交互式客户端程序;使用sql语句时会有提示信息 mysql_secure_insta ... 
- js实现全屏弹框
			<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ... 
- Java学习(一)MarkDown语法
			Java学习(一)MarkDown语法 一.标题语法 一级标题 一级标题前添加一个#号 二级标题 二级标题前添加两个#号 三级标题 三级标题前添加三个#号 ... 二.字体 1.粗体 hello wo ... 
- React报错之Objects are not valid as a React child
			正文从这开始~ 总览 当我们尝试在JSX代码中,直接渲染对象或者数组时,会产生"Objects are not valid as a React child"错误.为了解决该错误, ... 
- Auto.js 特殊定位控件方法  不能在ui线程执行阻塞操作,请使用setTimeout代替
			本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! Auto.js 特殊定位控件方法 操作环 ... 
- Spring源码 18 IOC refresh方法13
			参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ... 
- 【碳硫磷模拟赛】消失的+和* (树形DP)
			好久没做过这么恶心的DP题了 题面 题面很简单,有一个计算式,由+号.*号.括号和小于10的正整数组成,现在所有的+和*(由于属于违禁词而)都被-号给和谐掉了,现在要求所有可能的原计算式的结果之和. ... 
- RabbitMQ 入门系列:6、保障消息:不丢失:发送方、Rabbit存储端、接收方。
			系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ... 
- KingbaseES ksqlrc文件介绍
			ksqlrc文件作用 ksql在连接到数据库后但在接收正常的命令之前,会尝试读取并执行该文件中的命令,如果加上-X参数,则跳过该文件. 系统级的启动文件是ksqlrc,文件在安装好的KingbaseE ... 
- Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):1、JIRA账号注册
			文章目录: Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):1.JIRA账号注册 Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):2.PGP ... 
