如何编写dll文件(开发环境vs2005)

如何编写dll文件(开发环境vs2005)

ID:21829726

大小:53.50 KB

页数:9页

时间:2018-10-25

如何编写dll文件(开发环境vs2005)_第1页
如何编写dll文件(开发环境vs2005)_第2页
如何编写dll文件(开发环境vs2005)_第3页
如何编写dll文件(开发环境vs2005)_第4页
如何编写dll文件(开发环境vs2005)_第5页
资源描述:

《如何编写dll文件(开发环境vs2005)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、如何编写DLL文件(开发环境VS2005)动态链接库 在Windows应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。此外,通过使用动态链接库,我们可以把一些常规的例程独立出来,有效的避免了不必要的重复开发,并且,由于应用程序使用了动态链接的方式,还可以在不需重新改写甚至编译应用程序的基础上更新应用程序的某些组件。 DLL分三种,包括:非MFCDLL、静态链接到MFC的常规DLL、动态链接到MFC的常规DLL、MFC扩展DLL,1.非MFCDLL(non-MFCDLL)

2、内部不使用MFC,调用非MFCDLL提供的导出函数的可执行程序可以使用MFC,也可以不使用MFC。一般来说,非MFCDLL的导出函数都使用标准的C接口(standardCinterface)。2.其余三种DLL的内部都使用了MFC。顾名思义,静态链接到MFC的常规DLL(regularDLLstaticallylinkingtoMFC)和动态链接到MFC的常规DLL(regularDLLdynamicallylinkingtoMFC)的区别在于一个使用的是MFC的静态链接库,而另一个使用的是MFC的DLL。这和一般的MFC应用程序的情况是很类似的。3.MFC扩展DLL一般用来提供派生于MFC

3、的可重用的类,以扩展已有的MFC类库的功能。MFC扩展DLL使用MFC的动态链接版本。只有使用MFC动态链接的可执行程序(无论是EXE还是DLL)才能访问MFC扩展DLL。MFC扩展DLL的另一个有用的功能是它可以在应用程序和它所加载的MFC扩展DLL之间传递MFC和MFC派生对象的指针。在其它情况下,这样做是可能导致问题的。 如何选择所应该使用的DLL的类型呢?我们可以从以下几个方面来考虑:1.相比使用了MFC的DLL而言,非MFCDLL显得更为短小精悍。因此,如果DLL不需要使用MFC,那么使用非MFCDLL是一个很好的选择,它将显著地节省磁盘和内存空间。同时,无论应用程序是否使用了MF

4、C,都可以调用非MFCDLL中所导出的函数。2.如果需要创建使用了MFC的DLL,并希望MFC和非MFC应用程序都能使用所创建的DLL,那么可以选择的范围包括静态链接到MFC的常规DLL和动态链接到MFC的常规DLL。动态链接到MFC的常规DLL比较短小,因此可以节省磁盘和内存,但是,在分发动态链接到MFC的常规DLL时,必须同时分发MFC的支持DLL,如MFCx0.DLL和MSVCRT.DLL等。而使用静态链接到MFC的常规DLL则不存在这种问题。3.如果希望在DLL中实现从MFC派生的可重用的类,或者是希望在应用程序和DLL之间传递MFC的派生对象时,必须选择MFC扩展DLL。 创建和使

5、用动态链接库DLL文件和EXE文件都属于可执行文件,不同的是DLL文件包括了一个导出表,导出表中给出了可以从DLL中导出的所有函数的名字。外部可执行程序只能访问包括在DLL的导出表中的函数,DLL中的其它函数是私有的,不能为外部可执行程序所访问。可以使用VisualC++提供的DUMPBIN实用程序(可以在DevStudioVCbin目录下找到这个工具)来查看一个DLL文件的结构。举一个例子,如果需要查看DLL文件msgbox.dll的导出表,可以在命令提示符下键入下面的命令:>dumpbin/exportsmsgbox.dll运行结果如下:Microsoft(R)COFFBinaryF

6、ileDumperVersion5.00.7022Copyright(C)MicrosoftCorp1992-1997.Allrightsreserved.Dumpoffilemsgbox.dllFileType:DLLSectioncontainsthefollowingExportsforMSGBOX.dll0characteristics351643C3timedatestampMonMar2319:13:0719980.00version1ordinalbase1numberoffunctions1numberofnamesordinalhintname10MsgBox(000010

7、00)Summary7000.data1000.idata2000.rdata2000.reloc17000.text由上面的结果得知,msgbox.dll中仅包括了一个导出函数MsgBox()。注意:仅仅知道导出函数的名称并不足以从DLL中导出该函数。若在应用程序中使用显式链接(linkexplicitly),至少还应该知道导出函数的返回值的类型以及所传递给导出函数的参数的个数、顺序和类型;若使用隐含链接(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。