mfc下dll编程(图解)

mfc下dll编程(图解)

ID:1205818

大小:413.50 KB

页数:20页

时间:2017-11-08

mfc下dll编程(图解)_第1页
mfc下dll编程(图解)_第2页
mfc下dll编程(图解)_第3页
mfc下dll编程(图解)_第4页
mfc下dll编程(图解)_第5页
资源描述:

《mfc下dll编程(图解)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、MFC下DLL编程(图解)DLL(DynamicLinkLibrary,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库。DLL是应用程序的一种扩展,也是软件共享和重用的传统方法。DLL除了可同时被多个应用程序共享外,还可以在不改变调用接口(从而不需修改使用它的应用程序)的情况下,改进和升级里面的库函数。而且DLL与编写它的语言无关,例如,用VC生成的规则DLL,可以被VB、Delphi等生成的应用程序使用。DLL可以用多种语言和工具编写,我们这里只介绍如何使用MFC来编写和使用DLL。相关说明

2、文档位于MSDN帮助的“目录开发工具和语言VisualStudioVisualC++常见编程方法DLL”中。8.1基础本节先讨论DLL与静态库的区别,然后列出几种适合放置DLL的目录,最后介绍MFCDLL的三种类型。8.1.1DLL与静态链接库静态链接库Lib(StaticLinkLibrary),是在编译的链接阶段将库函数嵌入到应用程序的内部。如果系统中运行的多个应用程序都包含所用到的公共库函数,则必然造成很大的浪费。这样即增加了链接器的负担,也增大了可执行程序的大小,还加大了内存的消耗。Lib的好处是应用程序可以独立运行,而不需

3、要在操作系统中另外安装对应的DLL。而DLL采用动态链接,对公用的库函数,系统只有一个拷贝(一般是位于系统目录的*.DLL文件),而且只有在应用程序真正调用时,才加载到内存。在内存中的库函数,也只有一个拷贝,可供所有运行的程序调用。当再也没有程序需要调用它时,系统会自动将其卸载,并释放其所占用的内存空间。参见图8-1。运行时调用运行时调用编译器编译时链接应用程序(*.exe)#include……fun();……fun(){……}静态库(*.lib)…………fun(){……}操作系统运行时链接应用程序(*.exe)#include

4、x.h>……fun();……fun(){……}动态链接库(*.dll)…………fun(){……}使用静态库函数使用动态链接库图8-1静态库函数与动态链接库的区别DLL的缺点是应用程序不能独立运行,需要在操作系统中另外安装对应的DLL。例如,如果你的MFC项目被设置成“在共享DLL中使用MFC”的,则虽然生成的可执行程序很小,但是在其他没有安装VisualC++(运行环境)的机器上是不能直接运行的,需要另外安装MFC的动态链接库(如mfc90.dll)。8.1.2放置DLL的目录为了使需要动态链接库的应用程序可以运行,需要将DLL文件放在操作系统

5、能够找到的地方。Windows操作系统查找DLL的目录顺序为:1.所在目录——当前进程的可执行模块所在的目录,即应用程序的可执行文件(*.exe)所在的目录。2.当前目录——进程的当前目录。3.系统目录——Windows操作系统安装目录的系统子目录,如C:WindowsSystem32。可用GetSystemDirectory函数检索此目录的路径。4.Windows目录——Windows操作系统安装目录,如C:Windows。可用GetWindowsDirectory函数检索此目录的路径。5.搜索目录——PATH环境变量中所包含的自动搜

6、索路径目录,一般包含C:Windows和C:WindowsSystem32等目录。可在命令行用Path命令来查看和设置,也可以通过(在“我的电脑”右键菜单中选“属性”菜单项)“系统属性”中的环境变量,来查看或编辑“Path”系统变量和“PATH”用户变量。8.1.3MFCDLL的类型使用MFC编写的DLL,可以分成两大类:l规则DLL——规则(regular)DLL中所包含的函数,可以被所有Windows应用程序使用;n共享MFC——DLL中不包含MFC库函数,需要另外安装MFC动态链接库后才能使用;n静态MFC——DLL中包含MFC

7、库函数,可以脱离MFC动态链接库独立使用。l扩展DLL——扩展(extension)DLL中所定义的类和函数,只能被所MFC应用程序使用。而且扩展DLL中不能包含MFC库函数,也需要另外安装MFC动态链接库后才能使用。8.1.4导出函数的方法使用MFC创建DLL时,从项目中导出(export)函数到DLL文件的方法有:l使用模块定义文件(.def)。l使用__declspec(dllexport)关键字或其替代宏AFX_EXT_CLASS。这两种方法是互斥的,对每个函数只需用一种方法即可。另外,DEF文件只能用来导出函数,不能用于导出整个类。导

8、出C++类,必须用__declspec(dllexport)关键字或其替代宏AFX_EXT_CLASS。1.DEF文件模块定义(moduledefin

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

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

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