做最专业娱乐综合门户,优质资源资讯教程攻略!
微信公众号

扫码关注微信

手机版

扫码浏览手机版

[视频教程] C++ MFC 之动态链接库dll 窗口教程

0
回复
4
查看
[复制链接]
admin (帅逼1)实名认证

积分信息:
无忧币:116028
交易币:2147478427
贡献:999999

我的勋章:

灌水之王突出贡献优秀版主荣誉管理论坛元老沙发王源码大师在线王终身成就机器王知识库土豪活跃会员最佳新人热心会员


发表于 昨天 21:27 | 显示全部楼层 |阅读模式
<

马上注册,结交更多好友,享用更多功能,让你轻松玩转无忧吧。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C++ MFC 之动态链接库dll 窗口教程
[backcolor=rgba(255, 255, 255, 0.9)]对于一般的 dll 文件,我们可以在其他的 exe 文件中进行导入,并使用从该 dll 文件中导出的函数,同样的,MFC 程序也可以编译成动态链接库的形式。
[backcolor=rgba(255, 255, 255, 0.9)]当然我们今天讨论的主题是编写一个图形化界面的 MFC dll,通过注入工具将该 dll 注入到其他程序,然后打开我们编写的图形化界面。
一、编写 MFC 动态链接库
[backcolor=rgba(255, 255, 255, 0.9)]首先我们需要新建一个 MFC 动态链接库 项目,并指定如下类型:
C++ MFC 之动态链接库dll 窗口教程  8832 无忧技术吧www.92wuyou.cn
注:通过指定静态链接属性,当我们的 dll 程序可以运行在没有 mfc140.dll 的系统上。
1 新建一个窗口并与类文件绑定
[backcolor=rgba(255, 255, 255, 0.9)]此时,我们需要新建一个窗口,该窗口就是用于接收我们各种操作的窗口,右键资源文件 -> 添加 -> 资源,选择 Dialog 新建:
C++ MFC 之动态链接库dll 窗口教程  440 无忧技术吧www.92wuyou.cn
[backcolor=rgba(255, 255, 255, 0.9)]此时就生成了窗口,我们也可以对窗口进行各种属性的设置,如窗口标题、大小等。然后我们需要右键该新建窗口 -> 添加类,将其与类文件绑定,指定基类为 CDialog:
C++ MFC 之动态链接库dll 窗口教程  10000 无忧技术吧www.92wuyou.cn
CDialogEx 基类比 CDialog 基类的功能更加丰富,适用于 XP 以后的系统,而 CDialog 基类更加简单,兼容性更强,后面演示代码基于 CDialog 基类。
[backcolor=rgba(255, 255, 255, 0.9)]然后在主文件中添加刚刚新建的类头文件:
C++ MFC 之动态链接库dll 窗口教程  3253 无忧技术吧www.92wuyou.cn
[backcolor=rgba(255, 255, 255, 0.9)] C++ MFC 之动态链接库dll 窗口教程  9934 无忧技术吧www.92wuyou.cn
2 在 MFC 初始化函数中开启模态对话框线程
[backcolor=rgba(255, 255, 255, 0.9)]通过上面的操作新建好对话框后,我们接下来需要在 MFC 动态链接库初始化的时候开启一个线程,该线程用于启动我们刚刚创建的模态对话框,下面是 MFC 动态链接库的初始化函数:

// CMFCLibrary1App 初始化BOOL CMFCLibrary1App::InitInstance(){        CWinApp::InitInstance();        return TRUE;}
注:当 DLL 被加载后会触发该函数做一些初始化工作,如窗口的创建、显示等(对应的卸载函数为 ExitInstance())。
[backcolor=rgba(255, 255, 255, 0.9)]接下来我们编写线程函数,并开启一个线程执行该函数:
[backcolor=rgba(255, 255, 255, 0.9)]

// 注入 dll 后用于打开窗口的线程回调函数CMainDialog* pCMainDialog = NULL;DWORD WINAPI ThreadFunction(LPARAM lparam){        pCMainDialog = new CMainDialog();        pCMainDialog->DoModal();    // 创建模态对话框然后堵塞,等待窗口关闭后才会继续往下执行        FreeLibraryAndExitThread(theApp.m_hInstance, 1);    // 释放,会触发 ExitInstance() 函数        return 0;}// CMFCLibrary1App 初始化BOOL CMFCLibrary1App::InitInstance(){        CWinApp::InitInstance();        if (!::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction, NULL, 0, NULL))        {                MessageBoxA(NULL, "CreateThread() error", NULL, 0);        }        return TRUE;}二、注入 MFC dll
[backcolor=rgba(255, 255, 255, 0.9)]
[backcolor=rgba(255, 255, 255, 0.9)]选择一个任意的注入软件,并选择一个任意的进程注入,效果如下:
[backcolor=rgba(255, 255, 255, 0.9)] C++ MFC 之动态链接库dll 窗口教程  9577 无忧技术吧www.92wuyou.cn
三、调试 MFC dll
[backcolor=rgba(255, 255, 255, 0.9)]如果是需要调试 exe 文件,直接可以在 VS 编译器里面点击调试器运行即可,但是 dll 文件如何调试呢?
[backcolor=rgba(255, 255, 255, 0.9)]以调试刚刚编写的 dll 为例,我们首先打开待注入的进程,这里是 notepad.exe,然后点击 VS 的调试 -> 附加到进程,然后找到我们待注入的进程进行附加:
[backcolor=rgba(255, 255, 255, 0.9)] C++ MFC 之动态链接库dll 窗口教程  868 无忧技术吧www.92wuyou.cn
[backcolor=rgba(255, 255, 255, 0.9)] C++ MFC 之动态链接库dll 窗口教程  8581 无忧技术吧www.92wuyou.cn
[backcolor=rgba(255, 255, 255, 0.9)] C++ MFC 之动态链接库dll 窗口教程  4252 无忧技术吧www.92wuyou.cn
[backcolor=rgba(255, 255, 255, 0.9)]
[C++] 纯文本查看 复制代码
	auto dlg = new CMainDialog;
	//取的dlg的指针,做消息循环使用
	m_pMainWnd = dlg;
	dlg->DoModal();


无忧技术吧-免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.92wuyou.cn无关。
2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
4、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
5、无忧技术吧(www.92wuyou.cn)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。无忧技术吧不承担任何因为技术滥用所产生的连带责任。无忧技术吧内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或QQ与我们联系处理。
6、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:whctwlgzs@foxmail.com),本站将立即改正。
联系方式:
站长邮箱:whctwlgzs@foxmail.com
站长QQ:4040068
无忧技术吧www.92wuyou.cn
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

🤖 AI智能体
关闭

站长推荐上一条 /2 下一条

QQ:4040068

周一至周五 9:30-18:00

武汉市江夏区藏龙岛联享企业中心A栋1单元703室A015

  • 关注微信账号

  • 关注微博账号