文档详情

第20章DLL的MFC编程.doc

发布:2017-04-15约1.41万字共28页下载文档
文本预览下载声明
PAGE  PAGE 29 第三篇 实用编程 前两篇分别介绍了Visual C++的MFC编程和Visual C# 的.NET编程的基础内容,重点放在用户界面和图形绘制部分。 Windows编程技术非常广泛和丰富,许多内容属于高级课题,例如:系统编程、上下文帮助、泛型编程、多核并行编程、组件编程、面向方面的编程、服务器端编程、分布式编程、云计算等等。限于篇幅,本书只简单介绍:实用的动态链接库之MFC编程、基于多核处理器的并行编程、商业应用所需的数据库编程和应用广泛的网络编程。 本篇包含如下4章(其中打星号的为可选内容): 第20章 动态链接库编程* 第21章 网络编程 第22章 数据库编程* 第23章 多核并行编程* 第20章 DLL的MFC编程 DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库。DLL是应用程序的一种扩展,也是软件共享和重用的传统方法。 DLL除了可同时被多个应用程序共享外,还可以在不改变调用接口(从而不需修改使用它的应用程序)的情况下,改进和升级里面的库函数。而且DLL与编写它的语言无关,例如,用VC生成的规则DLL,可以被VB、Delphi等生成的应用程序使用。 DLL可以用多种语言和工具编写,我们这里只介绍如何使用MFC来编写和使用DLL。相关说明文档位于MSDN帮助的“MSDN Library\开发工具和语言\ Visual Studio 2015\Visual C++\开发工具\生成 C/C++ 程序\Visual C++中的DLL\”中。 20.1 基础 本节先讨论DLL与静态库的区别,然后列出几种适合放置DLL的目录,最后介绍MFC DLL的三种类型。 20.1.1 DLL与静态链接库 静态链接库Lib(Static Link Library),是在编译的链接阶段将库函数嵌入到应用程序的内部。如果系统中运行的多个应用程序都包含所用到的公共库函数,则必然造成很大的浪费。这样即增加了链接器的负担,也增大了可执行程序的大小,还加大了内存的消耗。Lib的好处是应用程序可以独立运行,而不需要在操作系统中另外安装对应的DLL。 而DLL采用动态链接,对公用的库函数,系统只有一个拷贝(一般是位于系统目录的*.DLL文件),而且只有在应用程序真正调用时,才加载到内存。在内存中的库函数,也只有一个拷贝,可供所有运行的程序调用。当再也没有程序需要调用它时,系统会自动将其卸载,并释放其所占用的内存空间。参见图20-1。 运行时调用 运行时调用 编译器 编译时 链接 应用程序(*.exe) #include xx.h …… fun(); …… fun() { …… } 静态库(*.lib) …… …… fun() { …… } 操作系统 运行时 链接 应用程序(*.exe) #include xx.h …… fun(); …… fun() { …… } 动态链接库(*.dll) …… …… fun() { …… } 使用静态库函数 使用动态链接库 图20-1 静态库函数与动态链接库的区别 DLL的缺点是应用程序不能独立运行,需要在操作系统中另外安装对应的DLL。例如,如果你的MFC项目被设置成“在共享DLL中使用MFC”的,则虽然生成的可执行程序很小,但是在其他没有安装Visual C++(运行环境)的机器上是不能直接运行的,需要另外安装MFC的动态链接库(如mfc90.dll)。 20.1.2 放置DLL的目录 为了使需要动态链接库的应用程序可以运行,需要将DLL文件放在操作系统能够找到的地方。Windows操作系统查找DLL的目录顺序为: 所在目录——当前进程的可执行模块所在的目录,即应用程序的可执行文件(*.exe)所在的目录。 当前目录——进程的当前目录。 系统目录——Windows操作系统安装目录的系统子目录,如C:\Windows\ System32。可用GetSystemDirectory函数检索此目录的路径。 Windows目录——Windows操作系统安装目录,如C:\Windows\。可用GetWindowsDirectory函数检索此目录的路径。 搜索目录——PATH环境变量中所包含的自动搜索路径目录,一般包含C:\Windows\和C:\Windows\System32\等目录。可在命令行用Path命令来查看和设置,也可以通过(在“我的电脑”右键菜单中选“属性”菜单项,或在“计算机”右键菜单中选“属性”菜单项,在左栏中选“高级系统设置”项)打开“系统属性”对话框中(“高级”页里)的“环境变量”,来查看或编辑“Path”系统变量和“PATH”用户变量。 20.1
显示全部
相似文档