您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > VC6编译环境的MFC扩展DLL的应用
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文件************************///exportedAPIfunctions#ifndef_CAD_DEF_H_#define_CAD_DEF_H_#includemath.h#includeafxtempl.h//要导出的C++类classAFX_EXT_CLASSTo3D{public://公共类成员变量doublex_out1,y_out1,z_out1;public://构造与析构函数To3D();~To3D();//类成员函数voidTo3D_change1(doublex,doubley);};//要导出的全局函数doubleAFX_EXT_APITo3D_change2(doublex,doubley);#endif/**********************************************//**********************cpp文件****************/#includestdafx.h#includemath.h#includeTo3D.h//构造函数To3D::To3D(void){//公共成员赋初值x_out1=0;y_out1=0;z_out1=0;}//析构函数To3D::~To3D(){}//To3D类成员函数voidTo3D::To3D_change1(doublex,doubley){x_out1=x+1000;y_out1=y+1000;z_out1=1000;}//全局函数doubleTo3D_change2(doublex,doubley){doubleout2;out2=500;returnout2;}/************************end***********************/在MFC项目的成员函数调用DLL的C++类成员变量和导出的全局函数的代码如下:/**************************************************/voidCToDlg::OnOK(){//TODO:AddextravalidationhereTo3Dm1;//类派生定义doublep1;m1.To3D_change1(1,1);//类成员函数运行p1=m1.z_out1;//直接调用已被类成员函数改变的类公共成员变量CStringstr1;str1.Format(2D变3D坐标为:%f,p1);MessageBox(str1);doublep2;p2=To3D_change2(1,1);//直接调用导出的全局函数名CStringstr2;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++类,如下:完毕!
本文标题:VC6编译环境的MFC扩展DLL的应用
链接地址:https://www.777doc.com/doc-2866031 .html