书籍:《Visual C++ 2017从入门到精通》
环境:visual studio 2022
创建MFC DLL工程


添加对话框资源及其对应的类

修改ID
添加类

编写CMyDlg.h

编写CMyDlg.cpp

重写OnInitDialog()

编写OnInitDialog()
设置窗口标题SetWindowText(m_strTitle);
// CMyDlg 消息处理程序
BOOL CMyDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
SetWindowText(m_strTitle);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
添加导出函数
在Test714_1.h头文件中添加声明

在Test714_1.cpp中实现该函数
void ShowDlg(TCHAR* sz)
{
/*1. 模块状态切换(AFX_MANAGE_STATE)
作用:确保 DLL 内部的 MFC 资源(如对话框模板、字符串)正确加载。
实现机制:
AfxGetStaticModuleState() 获取 DLL 自身的模块状态(AFX_MODULE_STATE)。
宏 AFX_MANAGE_STATE 在作用域内切换资源句柄,函数退出时自动恢复原状态。
必要性:若未切换,DLL 中的对话框可能错误加载主程序的资源。*/
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg dlg; //2. 对话框对象创建(CMyDlg dlg)
/*3.标题设置(SetTitle)
字符串格式化:CString::Format 将 sz 内容格式化为宽字符字符串。
标题传递:SetTitle 应为 CMyDlg 的自定义方法,或使用 SetWindowText 直接设置标题栏文本。*/
CString str;
str.Format(_T("%s"), sz);
dlg.SetTitle(str);
/*4.模态对话框显示(DoModal)
阻塞行为:DoModal() 以模态方式显示对话框,等待用户操作后返回结果(IDOK / IDCANCEL)。
消息循环:内部启动消息循环,处理对话框事件(如按钮点击)。*/
dlg.DoModal();
}
编写模块定义文件

编译生成DLL
创建MFC应用程序调用MFC DLL中的ShowDlg()
添加按钮及其对应的事件处理函数

加载DLL库并调用ShowDlg()
加载DLL库
#include "../Test714_1/Test714_1.h" //加载同解决方案中的DLL的头文件
#pragma comment(lib, "../x64/Debug/Test714_1.lib") //加载DLL对应的引入库文件
调用ShowDlg()


4436

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



