关于DLL的VC++程序编程方法.pdf
《关于DLL的VC++程序编程方法.pdf》由会员分享,可在线阅读,更多相关《关于DLL的VC++程序编程方法.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 文章编号:1006-4729(2001)04-0051-04收稿日期:2001-05-16关于DLL的VC+程序编程方法方 莉,林中达(东南大学 动力工程系,南京 210096)摘 要:简要介绍了利用动态链接库(DLL)输出类、函数、变量的各种方法,以及如何简便地将DLL与用户应用程序相链接,并对所讨论的方法,全部配有VC+实例说明.关键词:动态链接库;类;函数;变量;输出;链接中图分类号:TP315 文献标识码:A引 言动态链接库(DLL)是一种基于Windows的程序模块.它不仅可以包含可执行代码,而且还有数据,各种资源,因而扩大了库文件的使用范围.在进行大型软件开发时,利用DLL技术将
2、程序分为一系列的主程序和DLL,可以减少开发的工作量.由于每个模块减少了,访问的速度将提高.DLL程序本身不能运行,它需要一个入出口函数,在应用程序使用DLL的内容前,系统先调用入出口函数完成DLL的初始化和终止工作.此外,设计的这个DLL对外提供了哪些功能、接口如何定义后,DLL内部实现就和其他普通程序设计没有什么两样.使用DLL的动态链接并不是将库代码拷贝,而是在程序中记录了函数的入口点和接口,在程序执行时才将库代码装入内存.不管多少程序使用DLL,内存中都只有一个DLL的副本,当没有程序使用它时,系统就将它移出内存.可见,灵活使用DLL将可实现数据和资源共享,避免重复代码造成的磁盘和内存
3、资源浪费.此外,由于DLL独立于链接它们的应用程序,调用的地址转换是在加载时解决的.这使得DLL的故障查找和小的修改比较简单,不必重新编译调用它们的应用程序.通过DLL可以输出类、函数、变量.笔者结合自己在使用DLL的过程中所遇的问题,对如何实现上述输出内容以及将DLL与用户应用程序相链接的原理和方法进行探讨.1DLL输出及方法1.1 输出类1.1.1 利用宏AFEXTCLASS输出类1新建一个工程时,使用MFC AppWizard(dll)自动创建DLL.AppWizard允许建立两种DLL,即扩展DLL与常规DLL.由于扩展DLL支持C+接口,能够导出整个类,故在此选择MFC扩展DLL.2
4、 在DLL的类说明头文件中,使用宏AFXEXTCLASS来导出整个类.ClassAFXEXTCLASS CMyClass:pub2lic CObject3 在链接此DLL的应用程序中加入包含输出类说明的头文件.#include“e:实验 MyClass.h”1.1.2 利用关键字 declspec(dllexport)输出类1 建立MFC扩展DLL.2 在DLL的类说明头文件中加入 declspec(dllexport)关键字.classdecspec(dllexport)CMyClass:publicCObject.3 在链接此DLL的应用程序的头文件中加入相应的关键字 declspec(d
5、llimport)来导入DLL的输出类.classdeclspec(dllimport)CMyClass:public CObject 第17卷第4期2001年12月 上 海 电 力 学 院 学 报Journalof Shanghai University ofElectricPowerVol.17No.4Dec.2001 1995-2006 Tsinghua Tongfang Optical Disc Co.,Ltd.All rights reserved.1.2 输出函数1.2.1利用DLL中的模块定义文件(.def)输出函数1 使用MFC AppWizard(dll)自动创建DLL,它会
6、创建一个DEF文件的框架并添加到这个工程中,由于只需导出函数,故在此选择MFC常规DLL.2 在DEF文本文件中的EXPORTS语句后,输出函数名首先出现.下面以一个具体的DLL的DEF文件为例看一看怎样在DEF文件中加入说明语句.例如一个名为test的DLL中想要输出 函数SquareRoot:;test.defLIBRARY“test”DESCRIPTIONtest Windows Dynamic LinkLibraryEXPORTS;Explicit exports can go hereSquareRoot可以看出,我们需做的工作很简单,只要在EXPORTS语句后加上输出函数名即可,如
7、粗体部分所示.在DEF中以分号开头的语句是注释.3 在DLL的类说明头文件中,加入函数说明语句double SquareRoot(double d).4 在链接此DLL的应用程序中加入包含输出函数说明的头文件#include“e:Samples test.h”1.2.2利用关键字 declspec(dllexport)输出函数1 建立MFC常规DLL.2 在DLL的函数说明头文件中,在定义函数时加上关键字 declspec(dllexport)declspec(dllexport)double SquareRoot(dou2ble).但是如果正在使用C,则编译程序会为SquareRoot产生其
8、他语言不能使用的名字.要想使用简易名SquareRoot,建议像下面这样编写声明:extern“C”declspec(dllexport)double Square2Root(double);3 在链接此DLL的应用程序对函数进行说明的头文件中加入与上述关键字相对应的关键字declaspec(dllimport),从而引入DLL中的输出函数.Extern“C”declspec(dllimport)doubleSquareRoot(double d).1.3 导出变量1.3.1 利用DEF文件CONSTANT关键字导出变量1 建立MFC常规DLL.2 在DEF文本文件中的WXPORTS导出语句后
9、加上输出变量名,为了与输出函数相区别,在变量名后还要加上CONSTANT关键字,表明前面的导出名不是函数名,而是一个数据变量.例如一个名为number的DLL中输出数字number:;number.def:Declares the module parametersfor the DLL.LIBRARY“number”DESCRIPTIONnumber Windows Dynamic LinkLibraryEXPORTS;Explicit exports can go herenumber CONSTANT.3 在链接此DLL的应用程序中用到此输出变量前必须用extern关键字加以说明:ext
10、ern int number.特别要注意的是这种方法导出的并不是变量本身,而是DLL中导出变量的指针,应用程序必须通过强制指针转换来使用.如:int t;t=3(int3)number;pDC2 TextOut(t,t,“Hello”).其实在链接此DLL的应用程序中使用de2clspec(dllimport)关键字就方便多了,如:declspec(dllimport)int number.这里就可以直接使用,无须进行强制指针转换等许多附加工作.1.3.2 利用DEF文件DATA关键字导出变量1 建立MFC常规DLL.2在DEF文件中用DATA关键字来代替CONSTANT使用,如:;numbe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 DLL VC 程序 编程 方法
限制150内