文档详情

VC6编译环境的MFC扩展DLL的应用..docx

发布:2017-01-07约1.82千字共9页下载文档
文本预览下载声明
VC6编译环境的MFC扩展DLL的应用奈李和李子2015.8.14VC6编译环境的MFC扩展动态库既可导出C++全局函数,又能导出C++类。我们知道C++是面向对象编程,以类来组织程序框架的,因此,充分利用MFC扩展动态库功能是相当重要的。另外,可以VC6自带的或另单独下载的depends反汇编软件工具查看DLL导出的类和函数,如下图所示。在制作MFC扩展动态库DLL之前,需把头文件(.h)和执行文件(.cpp)编写好,编写规则和应用步骤如下:(1)在头文件中,使用AFX_EXT_ClASS来定义DLL库的输出C++类,如下代码所示:(2)在头文件中,使用AFX_EXT_API定义DLL库的输出全局函数,如下代码所示:/**********************h文件************************/// exported API functions#ifndef _CAD_DEF_H_#define _CAD_DEF_H_#include math.h#include afxtempl.h//要导出的C++类class AFX_EXT_CLASS To3D {public: //公共类成员变量 double x_out1 , y_out1 , z_out1;public://构造与析构函数To3D();~To3D();//类成员函数void To3D_change1(double x ,double y);} ;//要导出的全局函数double AFX_EXT_API To3D_change2(double x ,double y);#endif/**********************************************//**********************cpp文件****************/#include stdafx.h#include math.h#include To3D.h//构造函数To3D::To3D(void){//公共成员赋初值 x_out1=0; y_out1=0; z_out1=0;}//析构函数To3D::~To3D(){}//To3D类成员函数void To3D::To3D_change1(double x ,double y){x_out1=x+1000;y_out1=y+1000;z_out1=1000;}//全局函数double To3D_change2(double x ,double y){ double out2; out2=500;return out2;}/************************end***********************/在MFC项目的成员函数调用DLL的C++类成员变量和导出的全局函数的代码如下:/**************************************************/void CToDlg::OnOK() {// TODO: Add extra validation here To3D m1; //类派生定义 double p1; m1.To3D_change1(1,1); //类成员函数运行 p1=m1.z_out1; //直接调用已被类成员函数改变的类公共成员变量 CString str1; str1.Format(2D变3D坐标为:%f,p1); MessageBox(str1); double p2; p2=To3D_change2(1,1);//直接调用导出的全局函数名 CString str2; str2.Format(2D变3D坐标为:%f,p2); MessageBox(str2); CDialog::OnOK();}/**********************end********************/ (3)建立MFC扩展dll工程,步骤如下:编译组建成功,即可在Debug生成lib和dll文件,如下:(4)在需调用的H文件和cpp文件加入生成dll的头文件,并把lib和dll文件放入工程文件夹中,在VC6工程设置连接lib文件,在cpp文件中不需声明外部函数和C++类,就可以直接调用动态库的导出函数和C++类,如下:完毕!
显示全部
相似文档