VS2015动态库编程之导出C++类(下)

来源:互联网 发布:弘扬软件股份有限公司 编辑:程序博客网 时间:2024/05/18 22:47

文章相关视频下载地址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_radiusm_girthm_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()函数则会报错。

 



原创粉丝点击