《【教学课件】第9章动态连接库DLL.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章动态连接库DLL.ppt(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第9章 动态连接库DLLDLL(Dynamic Link Library,动态链接库)通常是一个扩展名为dll的文件。用户可以将一些函数编写到DLL中,由exe文件执行时装入,然后调用。调用DLL内的函数和调用正常函数一样。使用DLL进行编程有如下几个优点。提供二次开发的平台(可以制作成SDK,将高级的内容封装起来,再将封装后的内容提供给其他用户)。可以节省磁盘空间和内存(多个进程如果同时使用同一个DLL,DLL在内存中只占用一份内存空间)。9.1 示例编写简单的DLL本节将演示如何创建一个DLL工程。创建DLL工程的步骤如下。(1)单击“File”“New”命令,弹出“New”对话框,在左侧
2、的列表框中选择“Win32 Dynamic-Link Library”选项,在右侧的“Project Name”文本框中输入工程名eg_1_firstdll,如图所示。单击“OK”按钮,确定操作。(2)如图所示,此时提示用户选择DLL的类型,选择“A simple Dll project”单选按钮,单击“Finish”按钮,完成DLL的创建。9.2 导入导出DLL中的函数DLL程序不能直接运行,只能由其他程序加载。DLL只负责导出数据,加载DLL的程序负责导入数据。9.2.1 用DLL导出函数在DLL中可以任意编写函数。在函数前面添加_declspec(dllexport)关键字,表示该函数是
3、导出函数。在前面的例子中添加代码,导出一个求和的函数。相应代码如下。9.2.2 在程序中导入DLL中的函数使用_declspec(dllimport)关键字表示一个函数是导入函数。本小节将演示如何在应用程序中导入DLL中导出的函数,其具体操作步骤如下。(1)新建对话框程序,工程名为eg_2_loaddll。(2)将DLL工程内DEBUG目录中的eg_1_firstdll.dll文件与eg_1_firstdll.dll.lib文件复制到eg_2_loaddll工程文件夹。(3)添加对DLL的链接,在程序任意位置添加如下代码。#pragma comment(lib,”eg_1_firstdll.l
4、ib”)(4)添加AddExport函数声明,在要使用AddExport函数的代码之前,添加以下代码。_declspec(dllimport)int AddExport(int a,int b);(5)此时便可以任意使用AddExport函数了,使用方法与使用普通函数是一样的,添加对话框“确定”按钮的单击消息函数。9.3 DLL中导出类DLL中同样可以导出类。与导出函数类似,导出类只需在类前添加_declspec(dllexport)关键字。继续修改前面的DLL例子,为其添加一个导出类,然后在程序中导入并使用。具体操作步骤如下。(1)在DLL主文件中添加如下代码。(2)在调用程序中导入DLL中
5、的类,首先要完成上一节的第3步,然后在调用导出类代码前方添加导出类的声明,相应代码如下。(3)此时便可以使用此导出类,在上一节中的例子中添加代码如下。9.4 如何调试DLL由于DLL本身不能执行,所以直接编写的DLL无法调试,但是VC+6.0提供了调试DLL的方法。将DLL工程与其调用程序工程放到同一个工作区内,便可调试DLL。具体操作步骤如下。9.5 MFC动态链接库及其使用MFC DLL有2种类型,分别为常规MFC DLL和扩展MFC DLL。常规MFC DLL与前面讲述的Win32 DLL类似,唯一不同的是MFC DLL可以使用MFC类库而Win32 DLL不能使用。扩展MFC DLL不
6、仅可以使用MFC类库,并且还可以导出MFC类库,但缺点是不能被非MFC程序调用。本节将介绍如何创建扩展MFC DLL并导出对话框。9.5.1 创建扩展MFC DLL创建一个扩展MFC DLL的操作步骤如下。9.5.2 导入MFC DLL中的类导入MFC DLL中的类与导入Win32 DLL中的类方法基本相同。具体操作步骤如下。(1)新建对话框程序,工程名为eg_4_loadmfcdll,复制dll文件与lib文件到工程目录。(2)添加链接指令。#pragma comment(lib,eg_3_mfc_dll.lib)(3)包含DLL对话框类的头文件。#include./eg_3_mfc_dll
7、/DllTestDlg.h(4)此时已经可以使用CDllTestDlg类,编写对话框“确定”按钮的单击事件,代码如下。void CEg_4_loadmfcdllDlg:OnOK()CDllTestDlg dlg;dlg.DoModal();9.6 应用案例将自绘制按钮从MFC DLL中导出在前面的章节中介绍过带有自绘制功能的按钮,此按钮主要体现为COwnerDrawButton。开发程序时,将COwnerDrawButton类的头文件与源文件添加到项目中,然后为按钮变量关联控件即可。但是作为一个模块,将COwnerDrawButton封装到DLL中会更好。本节将编写一个MFC DLL导出COwnerDrawButton类。具体开发过程如下。9.7 小结本章主要讲述了DLL程序的开发方法,其中包括如何在DLL导出函数和类以及MFC DLL的使用。函数或类的导入导出都是间接的,代码被封装到DLL中,没有被复制到调用DLL的程序中。编写DLL时要注意留出调试的接口(在同一个工作区),这样编程起来会更加方便。在使用程序调用DLL时,要确定工程文件夹中的dll文件和lib文件是否是最新生成的。Win32 DLL经常用来封装一些与MFC无关的内容,而MFC DLL通常用来封装对话框资源或其他MFC类库。
限制150内