首页 理论教育 VisualC++高级编程技术:扩展MFCDLL

VisualC++高级编程技术:扩展MFCDLL

时间:2023-11-16 理论教育 版权反馈
【摘要】:首先介绍扩展MFC DLL的开发,因为这种MFC DLL比较常用。扩展MFC DLL能够支持C++接口,即该DLL能够导出定义在其内部的类。按下Finish,向导帮助我们产生扩展MFC DLL的开发框架。图3-7建立MFC扩展的DLL2. 添加包含文件包含文件含有DLL中导出的内容,本例程我们打算导出一个类、一个函数和一个资源。其它的两种MFC DLL不能导出MFC的派生类供其它模块使用。

VisualC++高级编程技术:扩展MFCDLL

首先介绍扩展MFC DLL的开发,因为这种MFC DLL比较常用。扩展MFC DLL能够支持C++接口,即该DLL能够导出定义在其内部的类。应用程序可以构造这些类的对象,也可以从这些类派生。AppWizard的默认设置是把扩展MFC DLL动态链接到MFC库,当应用程序使用扩展MFC DLL时,它们要一起链接到MFC DLL的相同版本上(如mfc42.dll或者mfc42d.dll)。下面介绍扩展MFC DLL开发例程。

1. 创建MFC DLL项目

使用MFC AppWizard(dll)建立开发DLL的项目,项目名字为MFCEXTDLL。在向导的三个MFC DLL类型选项中选择MFC Extension DLL(using shared MFC DLL),如图3-7所示。按下Finish,向导帮助我们产生扩展MFC DLL的开发框架

图3-7 建立MFC扩展的DLL

2. 添加包含文件

包含文件含有DLL中导出的内容,本例程我们打算导出一个类、一个函数和一个资源。首先添加一个类,这个类是一个很简单的“学生类”。方法是选择菜单命令Insert->New Class,弹出New Class对话框,在类型(Class type)列表中选择Generic Class,输入新建类名为CStudent,如图3-8所示。点击“OK”,应用程序为我们自动添加了一个类,对应的头文件和实现文件分别是Student.h和Student.cpp。其中,Student.h是DLL需要的包含文件。

在扩展MFC DLL开发中,经常要导出一些类,这些类的创建一般通过图3-8所示的对话框进行,本例程我们选择的新建类类型是Generic Class,很多时候要选择MFC类类型,从MFC库派生出来自己的类,这样就可以在MFC类库的基础上进行扩展。对MFC库中的类扩展派生出新类进而把类导出,是扩展MFC的一个优势所在,是扩展MFC特有的。其它的两种MFC DLL不能导出MFC的派生类供其它模块使用。

3. 编辑导出内容

打开Student.h文件,在其中编辑导出类和添加一个导出函数,这个导出函数和前面开发的普通DLL一样,就是那个Min函数。另外,在Student.h头文件中,我们还要添加几个菜单资源的ID,这些ID将要与要导出的菜单资源联系起来。程序清单3-4是Student.h的修改代码。

图3-8 新建类对话框

程序清单3-4 Student.h文件

相应地,修改Student.cpp文件如程序清单3-5所示。

程序清单3-5 Student.cpp文件

(www.xing528.com)

上面的代码中,读者可能已经注意到有两个特殊的修饰词AFX_EXT_CLASS和AFX_EXT_API出现在导出类和导出函数的前面。实际上,它们是MFC定义的两个宏,其具体定义是:

这些宏的作用是,在开发MFC扩展DLL的程序中,预定义_AFXEXT,编译器根据_AFXEXT把宏解释成修饰关键字__declspec(dllexport),而在使用DLL的程序中,没有预定义_AFXEXT,编译器就会把宏解释成__declspec(dllimport)。所以说,这里没有什么新内容,都是普通DLL开发例程中讲解到的知识。

4. 添加导出资源

在这里,我们要导出一个菜单资源。具体的方法如下:

(1)打开项目工作区(Workspace)的ResourceView,右击MFCEXTDLL resources,在弹出式菜单中选择Insert命令。

(2)在Insert Resource对话框中选择Menu并按下“New”按钮(见图3-9),为本项目添加一个菜单资源。

图3-9 添加资源的对话框

(3)把菜单资源的缺省ID名ID_MENU1修改成IDR_MENU_TEST,并设计该菜单如图3-10所示。其中,主菜单条中只有一个“测试”菜单项,它的子菜单中有一个名为“测试DLL”的子项,其ID为ID_TEST_TESTDLL。

(4)保存菜单资源,此时会在本项目的Resource.h文件中看到如下的两条宏定义:

图3-10 本项目菜单资源的布局

这里的ID值和我们在Student.h中定义的ID不一致,我们把它们改成9000和9001,修改后的ID如下所示:

5. Build扩展MFC DLL

编译链接本例程,从而生成MFCEXTDLL.LIB和MFCEXTDLL.DLL。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈