⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap13.html

📁 利用软件开发
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>第五章 使用Windows标准控件</TITLE>
<META NAME="Template" CONTENT="E:\Office95\Template\Manuscripts\16 开图书模板.dot">
</HEAD>
<BODY>

<FONT FACE="黑体" LANG="ZH-CN" SIZE=5><P ALIGN="CENTER"><A NAME="_Toc425699305"><A NAME="_Toc425699513">第十三章</FONT><FONT FACE="Arial" SIZE=5> </FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=5>动态链接库</A></A></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">在</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。此外,通过使用动态链接库,我们可以把一些常规的例程独立出来,有效的避免了不必要的重复开发,并且,由于应用程序使用了动态链接的方式,还可以在不需重新改写甚至编译应用程序的基础上更新应用程序的某些组件。</P>
<P ALIGN="JUSTIFY">本章介绍</FONT><FONT SIZE=3>Visual C++ 5.0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的动态链接库的创建和使用。这些内容包括</P>

<UL>
<P ALIGN="JUSTIFY"><LI>为什么要使用</FONT><FONT SIZE=3>DLL</LI></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>不同的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>类型之间的选择</LI></P>
<P ALIGN="JUSTIFY"><LI>在程序中创建和使用</FONT><FONT SIZE=3>DLL</LI></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>MFC</LI></P></UL>

</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">本章的重点在讲述</FONT><FONT SIZE=3>Win32 DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和基于</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,对于</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>仅给了一个很简单的例子,更深入的资料请参阅</FONT><FONT SIZE=3>Visual C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的联机文档。</P>
</FONT><FONT FACE="仿宋_GB2312" LANG="ZH-CN" SIZE=4><P ALIGN="CENTER"><A NAME="_Toc425699306"><A NAME="_Toc425699514">第一节</FONT><FONT SIZE=4> </FONT><FONT FACE="仿宋_GB2312" LANG="ZH-CN" SIZE=4>概述</A></A></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">动态链接库(</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,</FONT><FONT SIZE=3>Dynamic-Link Library</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)也是一种可执行文件,只不过它不能象普通的</FONT><FONT SIZE=3>EXE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>文件那样可以直接运行,而是用来为其它可执行文件(包括</FONT><FONT SIZE=3>EXE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>文件和其它</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)提供共享函数库。使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的应用程序可以调用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的导出函数(</FONT><FONT SIZE=3>imported function</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>),不过在应用程序本身的执行代码中并不包含这些函数的执行代码,它们经过编译和链接之后,独立的保存在</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中。这是一种和过去常用的静态链接不同的方式,使用静态链接库(</FONT><FONT SIZE=3>static link library</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)的应用程序从函数库得到所引用的函数的执行代码,然后把执行代码放进自身的执行文件中,这样,应用程序在运行时就可以不再需要静态函数库的支持。而使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的应用程序只包括了用于从</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中定位所引用的函数的信息,而没有函数具体实现,要等到程序运行时才从</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中获得函数的实现代码。显然,使用了</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的应用程序在运行时必须要有相应的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的支持。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>编程中得到了广泛的应用。</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序的基础:</FONT><FONT SIZE=3>Windows API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数中的相当部分就是由一组</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>所提供的,这些</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>从安装</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>起就存在于系统中了。尽管在前面的几章中我们没有明确的提到,但事实上我们早就在使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>进行编程了,只不过,所使用的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>都是现成的,并且所有调用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的操作都由</FONT><FONT SIZE=3>Visual C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的编译和链接程序替我们完成了。</P>
<P ALIGN="JUSTIFY">本章将详细的介绍如何创建自己的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和如何使用自己创建的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>进行编程。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">为什么要使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>呢?这当然是因为与传统的静态链库相比,使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>有着更多的优势:</P>

<UL>
<P ALIGN="JUSTIFY"><LI>使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>提供了一种共享数据和代码的方便途径。并且,由于多个应用程序可以共享同一个</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的函数,因此,使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>可以显著的节省磁盘空间。尤其对于</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序,有很多的操作都是“标准化”了的,如果使用传统的静态链接,每一个需要完成这些操作的应用程序都必须在自己的执行文件中包括相同的执行代码,这不但使单个的应用程序变得更长,也浪费了磁盘空间。</LI></P>
<P ALIGN="JUSTIFY"><LI>由于相同的原因,多个应用程序还可以同时共享</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在内存中的同一份拷贝,这样就有效的节省了应用程序所占用的内存资源,减少了频繁的内存交换,从而提高了应用程序的执行效率。</LI></P>
<P ALIGN="JUSTIFY"><LI>由于</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>是独立于可执行文件的,因此,如果需要向</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中增加新的函数或是增强现有函数的功能,只要原有函数的参数和返回值等属性不变,那么,所有使用该</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的原有应用程序都可以在升级后的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的支持下运行,而不需要重新编译。这就极大的方便了应用程序的升级和售后支持。</LI></P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>除了包括函数的执行代码以外,还可以只包括如图标、位图、字符串和对话框之类的资源,因此可以把应用程序所使用的资源独立出来做成</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。对于一些常用的资源,把它们做到</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中后,就可为多个应用程序所共享。</LI></P>
<P ALIGN="JUSTIFY"><LI>便于建立多语言的应用程序。我们可以把多语言应用程序中所使用的与语言相关的函数做到</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中,只要不同语言的应用程序所调用的函数都具有相同的接口,这样就可以通过简单地更换</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来实现多语言支持。</LI></P></UL>

<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">然而,使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>也有其不足之处。最典型的就是应用程序在运行时必须要有相应的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的支持。另外,使用</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>也增大了程序运行的开销,好在这种额外的开销对于大多数应用程序的影响并不明显,我们也只是在某些对运行速度要求苛刻的特殊场合,才不得不考虑这一点。</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Visual C++ 5.0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>支持多种</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,包括:</P>

<UL>
<P ALIGN="JUSTIFY"><LI>非</FONT><FONT SIZE=3>MFC DLL</LI></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>静态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</LI></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>动态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</LI></P>
<P ALIGN="JUSTIFY"><LI>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</LI></P></UL>

</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">其中非</FONT><FONT SIZE=3>MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(</FONT><FONT SIZE=3>non-MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)内部不使用</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,调用非</FONT><FONT SIZE=3>MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>提供的导出函数的可执行程序可以使用</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,也可以不使用</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。一般来说,非</FONT><FONT SIZE=3>MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的导出函数都使用标准的</FONT><FONT SIZE=3>C</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>接口(</FONT><FONT SIZE=3>standard C interface</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)。</P>
<P ALIGN="JUSTIFY">其余三种</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的内部都使用了</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。顾名思义,静态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(</FONT><FONT SIZE=3>regular DLL statically linking to MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)和动态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(</FONT><FONT SIZE=3>regular DLL dynamically linking to MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)的区别在于一个使用的是</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的静态链接库,而另一个使用的是</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。这和一般的</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序的情况是很类似的。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>一般用来提供派生于</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的可重用的类,以扩展已有的</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>类库的功能。</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>使用</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的动态链接版本。只有使用</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>动态链接的可执行程序(无论是</FONT><FONT SIZE=3>EXE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>还是</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)才能访问</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的另一个有用的功能是它可以在应用程序和它所加载的</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之间传递</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>派生对象的指针。在其它情况下,这样做是可能导致问题的。</P>

<UL>
</FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>注意:</LI></P>
</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>只有</FONT><FONT SIZE=3>Visual C++ 5.0</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>的专业版和企业版才支持到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>的静态链接。</LI></P>
<P ALIGN="JUSTIFY"><LI>静态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>过去的</FONT><FONT SIZE=3>USRDLL</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>有着相同的特性,同样的,</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>和过去的</FONT><FONT SIZE=3>AFXDLL</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>有着相同的特性。在</FONT><FONT SIZE=3>Visual C++ 5.0</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>中已不再使用</FONT><FONT SIZE=3>USRDLL</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>AFXDLL</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>这两个术语。</LI></P></UL>

</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">如何选择所应该使用的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的类型呢?我们可以从以下几个方面来考虑:</P>

<UL>
<P ALIGN="JUSTIFY"><LI>相比使用了</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>而言,非</FONT><FONT SIZE=3>MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>显得更为短小精悍。因此,如果</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>不需要使用</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,那么使用非</FONT><FONT SIZE=3>MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>是一个很好的选择,它将显著地节省磁盘和内存空间。同时,无论应用程序是否使用了</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,都可以调用非</FONT><FONT SIZE=3>MFC DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中所导出的函数。</LI></P>
<P ALIGN="JUSTIFY"><LI>如果需要创建使用了</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,并希望</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和非</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序都能使用所创建的</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,那么可以选择的范围包括静态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和动态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。动态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>比较短小,因此可以节省磁盘和内存,但是,在分发动态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>时,必须同时分发</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的支持</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,如</FONT><FONT SIZE=3>MFCx0.DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>MSVCRT.DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>等。而使用静态链接到</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的常规</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>则不存在这种问题。</LI></P>
<P ALIGN="JUSTIFY"><LI>如果希望在</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中实现从</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>派生的可重用的类,或者是希望在应用程序和</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之间传递</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的派生对象时,必须选择</FONT><FONT SIZE=3>MFC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>扩展</FONT><FONT SIZE=3>DLL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</LI></P></UL>

</FONT><FONT FACE="仿宋_GB2312" LANG="ZH-CN" SIZE=4><P ALIGN="CENTER"><A NAME="_Toc425699307"><A NAME="_Toc425699515">第二节</FONT><FONT SIZE=4> </FONT><FONT FACE="仿宋_GB2312" LANG="ZH-CN" SIZE=4>创建和使用动态链接库</A></A></P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -