文章相关视频下载地址http://pan.baidu.com/s/1eSpHjt4
2 调用DLL程序的编写
创建一个基于对话框的MFC程序,在该程序的界面中,输入圆的半径后,可以获取该圆的周长和面积,其界面结构为图4所示。
图4 程序界面
2.1 调用DLL
设置MFC程序的“附加库目录”和“附加依赖项”,并且将Win32_DLL_Class_Test.dll文件拷贝到MFC程序源代码所在的目录下。之后,将动态库Win32_DLL_Class_Test项目的Circle.h头文件拷贝到MFC程序源代码所在的目录下,并且将其导入到MFC程序中。在MFC程序的源代码中包含该头文件
#include "circle.h"
正如“1.3定义类的导出属性”中介绍的,由于在MFC程序中没有定义MY_DLL_API,此时MY_DLL_API的值是_declspec(dllimport),即说明Circle类是导出类。
2.2 实现功能
为界面中3个编辑框控件添加变量,类别设置成“Value”,变量类型设置成“float”,变量名分别为m_radius、m_girth和m_area如图5所示。
图5 为编辑框添加变量
为“计算”按键添加响应函数,在该响应函数中,获取输入的半径,之后定义Circle类的对象cc,并且通过该对象调用Circle类的GetGirth()函数和GetArea()函数得到圆的周长和面积,并且在响应的编辑框中显示。
UpdateData(TRUE);
circle cc;
cc.SetRadius(m_radius);
m_girth = cc.GetGirth();
m_area = cc.GetArea();
UpdateData(FALSE);
3 类的部分导出
之前提到到了Circle类为全部导出,即类中的所有成员均为导出属性。也可以通过Circle.h头文件将Circle类的部分成员设置为导出属性。
首先在Circle.h中将circle类前的MY_DLL_API注释掉,接下来在部分成员前加入MY_DLL_API修饰符:
class /*MY_DLL_API*/ circle
{
public:
MY_DLL_API circle();
public:
MY_DLL_API void SetRadius(float r);
MY_DLL_API float GetGirth();
float GetArea();
private:
float m_radius;
};
以上代码将Circle类的SetRadius()函数和GetGirth()函数设置为了导出,而GetArea()函数并没有设置为导出。此时,在MFC程序中,如果调用Circle类的GetArea()函数则会报错。