创建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的更多相关文章

  1. 第六次作业——利用MFC实现计算器图形界面以及简单四则运算表达式批处理

    参考资料:      1.MFC响应键盘      2.计算器实例      3.MFC文件对话框      4.MFCUpdateData()函数的使用      5.MFC教程      6.wi ...

  2. 创建Win32图形界面应用程序

    没有什么比创建一个Win32图形界面应用程序能让Win32汇编初学者更兴奋的了! 然而,对于像我这样没有代码便会陷入困境的人来说,看到下面的代码总能让人为之一振,百余行的代码使得Win32GUI编程并 ...

  3. FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

    继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作最后一篇,主要是想学一下 MFC 创建和配置. 一.创建 MFC 工程 文件->新建->项目->Visual ...

  4. 学习MFC创建界面

    原始学习文章地址: http://blog.csdn.net/chenyusiyuan/article/details/4744097 一.创建MFC 首先创建一个MFC对话框应用程序(Dialog- ...

  5. 结对项目——图形界面实现与dll动态链接

    先来一发软件截图~~~ 生成题目的界面 测评界面 第三块本来准备做一个文件历史记录的界面,但是由于时间不够,暂时还没做完. 图形界面的设计与实现 由于对传统的对话框风格不太满意,所以这次作业的图形界面 ...

  6. [ActiveX]使用VS2010创建MFC ActiveX工程项目

    ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能队列运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括web网页,应用程序窗体等等. ActiveX控 ...

  7. C++ 使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

  8. c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

  9. 【VS开发】使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

随机推荐

  1. Thingsboard硬网关金鸽BL102采集三菱PLC步骤

    PLC网关金鸽BL102:采集三菱FX-5U数据如何转成MQTT上报?金鸽BL102PLC网关时一款功能强大的PLC数据采集网关,南向可以采集主流的PLC,如三菱.西门子.台达.欧姆龙.施耐德等等PL ...

  2. MES对接Simba实现展讯平台 IMEI 写号与耦合测试

    文章开始之前,必须对Simba工具点一个大大的赞,Simba为了适应市面上不同厂家开发的 MES 系统,特地开发了统一的接口,各个 MES 厂家只需要按照接口规范去做开发,然后将中间件加载到 Simb ...

  3. 二手车价格预测 | 构建AI模型并部署Web应用 ⛵

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...

  4. 一文带你认知定时消息发布RocketMQ

    摘要:DMS任意时间定时消息能力发布. DMS是华为云的分布式消息中间件服务.适用于解决分布式架构中的系统解耦.跨系统跨地域数据流通.分布式事务协调等难题,协助构建优雅的现代化应用架构,提供可兼容 K ...

  5. day25--Java集合08

    Java集合08 15.HashTable 15.1HashTable的基本介绍 存放的元素是键值对:即K-V HashTable的键和值都不能为null HashTable的使用方法基本上和Hash ...

  6. 【java】学习路径37-练习:任意文件的复制

    使用字节完成复制 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException ...

  7. 如何在Apple Silicon Mac上主动安装Rosetta2

    前提是您的电脑搭载了Apple Silicon处理器 command + space(空格),输入"终端",打开. 输入 : softwareupdate --install-ro ...

  8. 【读书笔记】C#高级编程 第二章 核心C#

    (一)第一个C#程序 创建一个控制台应用程序,然后输入代码,输入完毕后点击F5 Console.WriteLine();这条语句的意思:把括号内的内容输出到界面上: Console.ReadKey() ...

  9. 大规模数据分析统一引擎Spark最新版本3.3.0入门实战

    @ 目录 概述 定义 Hadoop与Spark的关系与区别 特点与关键特性 组件 集群概述 集群术语 部署 概述 环境准备 Local模式 Standalone部署 Standalone模式 配置历史 ...

  10. 关于“No loop matching the specified signature and casting was found for ufunc lstsq_n”问题的解决

    下面这段代码是使用MatPlotLib绘制数据随时间变化的趋势. import datetime as dt import numpy as np import pandas as pd import ...