创建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】
经验总结扩展阅读
- KVM导入Ubuntu Cloud 镜像创建虚机及调整磁盘大小
- Docker | Compose创建mysql容器
- 一 SpringBoot - SpringBoot 初识
- Vue3 Vite3 多环境配置 - 基于 vite 创建 vue3 全家桶项目(续篇)
- webpack打包思路与流程解析
- 七 Netty 学习:NioEventLoop 对应线程的创建和启动源码说明
- Bootstrap5 如何创建多媒体对象
- 逆苍穹手游战力快速增加
- 电脑上怎么创建QQ群(怎么建qq群在电脑上)
- 新版手机qq怎么建群(现在手机qq怎么创建群)