动态链接导入库与静态链接库一样吗,静态链接库和动态链接库

  动态链接导入库与静态链接库一样吗,静态链接库和动态链接库

  目前带lib后缀的库有两种,一种是静态库(以下简称“静态库”),一种是动态链接库(DLL)的导入库(以下简称“导入库”)。

  静态库是一个或多个obj文件的打包,所以有人干脆把obj文件生成lib的过程叫做Archive,也就是把它们合并在一起。比如你链接了一个静态库,它会找出到底是哪个obj错了,也就是静态库只是一个外壳。

  一般动态库都会有相应的导入库,方便程序静态加载动态链接库。否则可能需要自己加载DLL文件,然后通过GetProcAddress手动获取相应的函数。有了导入库,只需要链接导入库,根据头文件函数接口的声明调用函数即可。

  导入库和静态库区别很大,本质上是两码事。静态库本身包含实际的执行代码、符号表等。而对于导入库,实际执行代码位于动态库中,导入库只包含地址符号表等。从而保证程序可以找到相应函数的一些基本地址信息。

  这实际上是许多开源代码发布的常用方式:

  1.预编译开发包:包含一些。dll文件和一些。lib文件。的。这里的lib是导入库,不要误认为是静态库。但是,引入方法和静态库是一样的,找到这些的路径。应该将lib添加到链接路径中。而。dll最好放在与最后生成的应用程序exe执行文件相同的目录中。运行时,它会被自动调用到动态链接库中。

  2.用户自己编译:下载的源代码是自己根据自述文件编译的。生成一个库文件,可能也是. dll.lib(导入库)

  3.如果你只有dll,并且知道dll中函数的函数原型,那么你可以直接在自己的程序中使用LoadLibary来调用DLL文件,GetProcAddress。

  动态链接库:

  动态链接库(DLL)是作为共享函数库的可执行文件。动态链接为进程提供了一种调用不属于其可执行代码的函数的方式。函数的可执行代码位于一个DLL中,该DLL包含一个或多个函数,这些函数与使用它们的进程分开编译、链接和存储。dll也有助于共享数据和资源。多个应用程序可以同时访问内存中单个DLL副本的内容。

  动态链接不同于静态链接,因为它允许可执行模块(。dll文件或。exe文件)来仅包含在运行时定位DLL函数的可执行代码所需的信息。在静态链接中,链接器从静态链接库中获取所有被引用的函数,并将库与代码一起放入可执行文件中。

  使用动态链接代替静态链接有几个优点。DLL节省内存,减少交换操作,节省磁盘空间,更容易升级,提供售后支持,提供扩展MFC库类的机制,支持多语言程序,轻松创建国际版本。

  API是应用程序编程接口。它是一组可用于操作组件、应用程序或操作系统的功能。通常,API由一个或多个提供特殊功能的dll组成。

  DLL是一个包含Microsoft?Windows?下运行的任何应用程序都可以调用的函数。在运行时,DLL中的函数动态链接到调用它的应用程序。无论有多少应用程序调用DLL中的函数,磁盘上只有一个文件包含该函数,并且DLL只有在被调用到内存中时才会创建。

  你听到最多的API大概就是Windows API了,它包含了构成Windows操作系统的各种dll。每个Windows应用程序都直接或间接地与Windows API交互。Windows API确保在Windows下运行的所有应用程序都以相同的方式运行。

  注意,随着Windows操作系统的发展,已经发布了多个版本的Windows API。Windows 3.1使用Win16 API。微软?Windows NT?Windows 95和Windows 98平台用微软?Win32?API .

  除了Windows API之外,还发布了其他一些API。例如,邮件应用程序编程接口(MAPI)是一组可用于编写电子邮件应用程序的dll。

  API传统上是为开发Windows应用程序的C和C程序员编写的,但其他编程语言(包括VBA)也可以调用dll中的函数。因为大多数DLL主要是为C和C程序员编写和编译的,所以调用DLL函数的方法不同于调用VBA函数的方法。使用API时,必须知道如何向DLL函数传递参数。

  警告调用Windows API和其他DLL函数可能会对您的应用程序产生不利影响。当直接从你自己的代码中调用DLL函数时,你绕过了一些通常由VBA提供的安全机制。如果在定义或调用DLL函数时出现错误(这对所有程序员来说都是不可避免的),可能会导致应用程序出错(也称为通用保护错误,或GPF)。最好的解决方法是在运行代码之前保存项目,并确保了解DLL函数调用的原理。

  LIB创建标准库、导入库和导出文件,在生成32位程序时可以和LINK一起使用。从命令提示符LIB运行。

  您可以在以下模式下使用LIB:

  或者修改COFF图书馆。

  将成员对象提取到文件中。

  创建导出文件和导入库。

  这些模式是互斥的;LIB一次只能在一种模式下使用。

动态链接导入库与静态链接库一样吗,静态链接库和动态链接库