#include \
// CCompute
CCompute::CCompute() { }
CCompute::CCompute(int d1, int d2) { }
CCompute::~CCompute() { }
// CCompute 成员函数 int CCompute::Add() { }
int CCompute::Sub() { }
11
m_data1 = d1; m_data2 = d2;
return m_data1 + m_data2;
return m_data1 - m_data2;
int CCompute::Mul() { }
double CCompute::Div() { }
int Mod(int d1, int d2) { }
编译运行时,后弹出图20-6所示的对话框:
if (d2 == 0 ) { }
return d1 % d2;
AfxMessageBox(L\return 0; if (m_data2 == 0 ) { }
return (double)m_data1 / m_data2;
AfxMessageBox(L\return 0;
return m_data1 * m_data2;
12
图20-6 调试会话的可执行文件对话框
要求你选择或输入使用此DLL的应用程序之可执行文件的名称或路径。这是因为DLL虽然包含了可运行函数的二进制代码,但是它并不是独立的应用程序,不能单独运行。因此,我们必须编写使用DLL的客户程序。
20.2.4 添加客户程序项目
为了演示扩展DLL的应用,我们在原解决方案ExtDll中,添加一个客户程序项目ExtClient。具体做法是,打开新建项目对话框,选中“Visual C++”之“MFC”的“MFC应用程序”模板,键入项目名ExtClient。注意,需选在对话框底部的“解决方案”下拉式列表中选中“添入解决方案”表项,参见图20-7。
图20-6 新建客户程序项目的对话框
按“确定”钮进入“MFC应用程序向导”对话框,在“应用程序类型”页,选中“基于对话框”单选钮,按“完成”添加项目。
此时,ExtDll解决方案包含两个项目:DLL项目ExtDll和客户程序项目ExtClient,生成的文件目录结构为:
ExtDll ←解决方案目录
Debug ←解决方案的调试目录
13
Release ←解决方案的发行目录 ExtDll ←DLL项目目录
Debug ←DLL的调试目录 Release ←DLL的发行目录 res ←DLL的资源目录
ExtClient ←客户程序项目目录
Debug ←客户程序的调试目录 Release ←客户程序的发行目录 res ←客户程序的资源目录
20.2.5 设置依赖项
为了使客户程序可以调用DLL,需要将它们关联起来。最简单的办法是设置DLL项目为客户项目的依赖项。具体做法是,在项目管理区中选中客户项目名“ExtClient”,选中菜单项“项目\\项目依赖项”,在弹出的“项目依赖项”对话框中,选中“依赖栏”中的“ExtDll”复选框,参见图20-7。
图20-7 设置ExtClient项目依赖项的对话框
14
20.2.6 编写客户程序代码
1.编辑对话框资源
添加表示操作数的2个静态文本框和2个文本编辑框(ID值分别为IDC_DATA1和IDC_DATA2)、5个表示四则运算和取模运算的按钮(ID值分别为IDC_ADD、IDC_SUB、IDC_MUL、IDC_DIV和IDC_MOD)、表示计算结果的1个静态文本框和1个文本编辑框(ID值为IDC_RESULT),删除原来“确定”按钮,将原来的“取消”按钮的“Caption”属性值改为“退出”,参见图20-8。
图20-8 客户程序的对话框界面
2.添加控件变量
为了动态获取用户输入的数据,我们需要为2个表示操作数据的文本编辑框,添加控件的Value值类别int型变量m_iData1和m_iData2。
3.添加事件处理
分别对5个计算按钮,为对话框类CExtClientDlg添加按钮通知消息BN_CLICKED(鼠标单击)事件的处理程序OnBnClickedAdd等。
4.编写代码
为了让客户程序可以使用DLL项目中的计算类CCompute,需要在客户程序对话框类CExtClientDlg的头文件的头部添加包含语句:
#include \
在对话框类的定义中,手工添加公共型类变量和成员函数:
public:
CCompute *m_pComp; void Comp(UINT nID);
15
20动态链接库编程
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)