您现在的位置: DLL下载家园 >> DLL文章 >> DLL技术文章 >> 正文

.DLL、.LIB、.H文件介绍

来源:本站原创 作者:DLL下载家园 更新时间:2012-12-26

(1)    DLL是Dynamic Link Library的缩写,意为动态链接库。

一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。当某个应用软件需要升级更新,你只要更新某些DLL文件,无需重新生成或安装整个程序。

 

(2)    LIB文件分为静态与动态:

静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序 。

动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持。

lib文件是不对外公开的,不能查看一个编译过后的文件 。

lib文件是二进制文件,所以要查看它的内容,只能反汇编。

 

(3)    .h储存函数与变量声明,在预处理阶段调用.h文件。

 

(4)    lib是编译时需要的,dll是运行时需要的。

如果要完成源代码的编译,有lib就够了。

如果也使动态连接的程序运行起来,有dll就够了。

 

(5)    一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。

如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。

 

(6)    在动态库的情况下,一个是引入库(.LIB)文件,一个是DLL文件;

引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL文件必须随应用程序一起发行,否则应用程序将会产生错误。注:你想知道血压计哪种好吗?

 

(7)    总结

.h储存函数与变量声明,在预处理阶段调用.h文件。


.dll用于运行阶段,如调用SetWindowText()函数等,需要在user32.dll中找到该函数。DLL可以简单认为是一种包含供别人调用的函数和资源的可执行文件。

.lib用于链接阶段,在链接各部分目标文件(通常为.obj)到可执行文件(通常为.exe)过程中,需要在.lib文件中查找动态调用函数的地址信息,如在user32.lib文件中查找SetWindowText()函数的地址偏移。

 

(8)    加载LIB文件方法

直接加入:

  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。

 

设置工程的 Project Setting:

  打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件。

 

加入程序代码中:

  加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。

 

(9) 用编程语言,打开lib文件的办法有三个:

  1、在object/library modules使用全路径名;

  2、把*.lib放在VC的Lib目录中

  3、修改project setting的Link->Input中的Addtional library path,加入你的目录。