DLL开发笔记

DLL(Dynamic Linkable Library)动态链接库

1、使用动态链接库的优点:

(1)减少内存空间要求:应用程序在运行时,只有当EXE程序确定要调用某些DLL模块时,系统才将它们装载到内存空间中。

(2)DLL模块可以被多个应用程序使用。

(3)只要函数声明中参数不改变,动态链接库中的函数体可以随意改变,调用该函数的应用程序不需要重新编译

2、DLL与LIB的异同

LIB为静态链接库,与动态链接库相似之处在于,他们都是可以执行代码及数据,放在库中,供应用程序调用。其区别在于

(1)静态链接库编译时为应用程序提供的是所引用函数的执行代码,程序在运行时就不在需要静态函数库的支持

(2)应用程序在使用DLL时,只包括了用于从DLL中所引用的函数信息,没有函数的具体实现。只有在运行时,才从DLL中获取函数的实现。

(3)静态链接库编译时拷贝一份库的代码,只用于该应用程序;动态链接库运行时才链接库,可以与其他应用程序共享库中函数和资源,不管有多少进程访问DLL,同一个DLL在内存中仅有一份。因此在内存消耗上动态链接库要比静态链接库小。

(4)静态链接库中不能包括其他的动态或静态的链接库,而动态链接库中还可以再包含其他的动态或静态链接库。

(5)使用静态链接库,应用程序比较大,但是比较完整,从一台机器复制到另一台机器可以直接运行;使用动态链接库必须包含其他的动态或静态链接库。

3、VC6.0 实现DLL

VC6.0支持自动生成两种DLL:Win32 DLL 和 MFC AppWizard DLL

(1)Win32 DLL 即 Win32 Dynamaic Link Library 共有三种DLL工程,没有什么区别,一般选择空工程(An empty DLL project)即可

(2)MFC DLL 也有三种形式,这种DLL可以使用和继承已有的MFC类:

Regular  DLL with MFC statically linked(常规静态链接MFC DLL):编译时将MFC代码加入到DLL中,使用该DLL时不需要MFC类库的支持,但文件比较大

Regular DLL using shared MFC DLL (常规动态链接MFC DLL):动态链接到MFC类库中,因此减少空间占用,但运行时依赖MFC类库。它可以被任何Win32程序使用,包括使用MFC的应用程序。

MFC Extension DLL(扩展MFC DLL):用来实现从MFC所继承下来类的重新利用。它可以输出一个从MFC所继承下来的类。它只能被使用MFC且动态链接到MFC的应用程序使用。

4、DLL的动态链接方法

DLL的开发就是应用程序中的导入函数与DLL文件中的导出函数进行链接,链接方式包括隐式链接和显示链接两种。

隐式链接:也叫加载时动态链接,由编译系统完成对DLL的加载,应用程序结束时DLL卸载(有其他应用程序,则Windows系统duiDLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时,才释放)。

显示链接:也叫运行时动态链接,用API函数加载和卸载DLL。这种方式能更加有效的使用内存

5、DLL文件构成

发布动态链接库需要三个文件:头文件(.h),导入库文件(.lib)和实际代码文件(.dll)

头文件 定义DLL能导出的函数、数据结构或类的声明;

导入库文件  扩展名与静态链接库的扩展名一样,但是它不同于静态链接库文件。该文件中包含了调用DLL的隐式链接,即加载时动态链接的信息。

实际代码文件中包含DLL真正的可执行代码。

一般情况下,使用Visual C++开发应用程序在需要加载DLL时,该DLL的包含文件(.h)和实际代码文件(.dll)都是要用到的。如果采用加载时动态链接DLL的方式,则导入库文件也是必要的。当工程被编译成可执行文件时,只需要(.exe)和(.dll)即可运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值