1.VS 解决方案的创建
  完成创建。 
2.动态链接库(DLL)项目创建
   完成dll项目,此时解决方案下有两个工程项目DLL_Dlg_Test 和 DLL_Dlg_Test_dll 
3.在动态链接库项目中添加对话框及其对应的类
     此时在DLL_Dlg_Test_dll项目下,增加了LibDllDlgTest.h 和 LibDllDlgTest.cpp两个对话框对应的类文件.

4.在dll项目中其它类文件(如CShowDlg.cpp)中,创建对话框显示函数
首先新建CShowDlg类,生成CShowDlg.cpp和CShowDlg.h文件,用于创建对话框类对象,并显示对话框
(1)包含LibDllDlgRest对话框类的头文件LibDllDlgRest.h (2)定义类对象并显示
void CShowDlg::ShowDlg()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 对话框能正常显示的关键语句
LibDllDlgRest Obj;
Obj.DoModal();
}

5.导出类,并被外部函数使用,显示dll中的对话框
(1)dll项目属性配置添加_LIB_EXPORT宏(宏名称任意)  (2)声明类导出
#ifdef _LIB_EXPORTS
#define LIB_API __declspec(dllexport)
#else
#define LIB_API __declspec(dllimport)
#endif // LIB_API
class LIB_API CShowDlg; //声明类导出
class CShowDlg
{
public:
CShowDlg();
~CShowDlg();
public:
void ShowDlg();
};
 (3)编译生成.dll文件  (4)外部使用导出类 ①在外部项目的对话框类中加载头文件和库链接
#include "../DLL_Dlg_Test_dll/CShowDlg.h"
#pragma comment(lib, "../Debug/DLL_Dlg_Test_dll.lib")
 ②对外部项目对话框的确定按钮添加点击事件  ③添加对话框显示程序
void DLL_Test_Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CShowDlg Obj;
Obj.ShowDlg();
CDialog::OnOK();
}
 (4)执行程序 弹出 外部对话框 → “确定” → 弹出“DLL对话框”,实现了DLL对话框的调用

|