vs2010下lib和dll文件的使用

一、lib文件的简介

.lib是一种文件后缀,是Windows操作系统的库文件,有静态lib和动态lib之分:

1)、静态lib

文件:将导出的文件的声明和实现都放在lib文件中,此时lib

文件主要包含函数的实现部分(cpp文件)

,例如类的函数定义。使用时只需配

合相关的头文件,编译后程序将lib

文件中的代码嵌入到宿主程序中,也就是最后的exe文件中,此时移除lib

文件,程序可以正常运行,即编译后就不需要lib文件的支持了。

2)、动态lib文件:相当于是一个h头文件,用于支持相应的dll

文件的运行。里面存储的是dll文件中各个导出函数的地址,达到链接主程序与dll文件的目的。

dll文件的使用

dll文件的使用分为动态加载和静态加载,两种方法优势都很明显:

动态加载:
在程序中用程序显示加载dll文件,通过函数GetProcAddress找到对应的函数的地址,利用函数指针直接访问对应的函数。该方法不需要lib文件的支持,也不需要包含对应的头文件,但是需要显式的加载dll文件,这也就意味着dll文件在编译的时候就已经被链接,且使用不是很方便,函数指针容易出错。
静态加载
:只加载对应的lib文件(是一些函数链接的信息,一般比较小),不加载dll文件,编译的时候只需要lib文件的支持,在运行的时候才调用dll文件的函数。此处lib文件和dll文件都放在工程目录下,且需要包含对应的头文件。 Windows中dll、exe都是可执行的文件,但是exe可以直接被操作系统调用执行,而dll文件不能,因此当有进程调用dll文件中函数时,直接即可运行。

lib文件与dll

(1)lib是编译时需要的,

dll是运行时需要的。

如果要完成源代码

的编译,有lib就够了。

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

在开发和调试阶段,当然最好都有。

(2)一般的动态库程序有lib文件和dll文件。

lib文件是必须在编译期就连接到应用程序中的,

而dll文件是运行期才会被调用的。如果有dll

文件,那么对应的lib

文件一般是一些索引信息,具体的实现在

dll文件中。如果只有lib文件,那么这个lib文件是

静态编译出来的,索引和实现都在其中。静态编译的lib

文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致

应用程序比较大,而且失去了动态库的灵活性,在版本升级时,

同时要发布新的应用程序才行。

(3)

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

DLL文件,引入库文件包含被DLL导出的函数

的名称和位置,DLL包含实际的函数和数据,应用程序使用

LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到

可执行文件中,因此在应用程序的可执行文件中,存放的

不是被调用的函数代码,而是DLL

中所要调用的函数的

内存地址,这样当一个

或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,

从而节省了

内存资源。从上面的说明可以看出,

DLL

文件必须随应用程序一起发行,否则

应用程序将会产生错误。

时间: 2024-10-20 02:34:49

vs2010下lib和dll文件的使用的相关文章

[转]windows下VS2010中lib与dll文件的生成与使用

原文地址:https://my.oschina.net/SysuHuyh5LoveHqq/blog/644622 近期在windows下开发了某个程序,需要将其生成静态文件(lib)以及动态库文件(dll),其中参考了不少帖子,有的讲得也不是很清楚明白,先将本人实践过的记录一下,供后期自己查询,也供各位大牛点评. 一.lib文件的生成与使用 1.lib的生成 相对来说,静态库文件还是比较容易生成和使用的,在代码上,貌似也不需要更改什么,举例说明: 头文件函数声明形式如下: extern bool

关于.h,.lib,.dll文件

1 .h文件: (1) .h只做声明,编译后不产生代码,#include 完全等价于把 .h 文件拷贝 到 .c 中: (2)函数定义要放在.c中,而.h只做声明.否则多引用几次,就会发生函数重复定义的错误: (3)C文件是编译器运行的最小单位,每个C文件会被编译成一个独立的目标文件(二进制):——obj文件 (4)连接器是以目标文件为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终的可执行文件: tips: (1)只有声明没有定义,编译阶段不会报错: (2).h声明的函数必然能在编

lib和dll文件的区别和联系

什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. (2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有 dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib

VS2010 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称 <转>

昨天写了一个很小的winform程序,其中引用了自己写的两个dll文件. 本来认为轻松搞定,结果一编译居然提示:未能找到类型或命名空间名称..... 于是删掉两个dll重新引用,再编译结果依旧!很是郁闷. 后来经过调查,终于发现了解决方法: 在项目上点右键-->属性-->应用程序-->目标框架-->修改为.NET Framework 4. 而我原来的设置是.NET Framework 4 Client Profile.问题就出在这里. 以下是MSDN给出的提示: If you ar

利用vs2010制作C语言 dll文件,并在其它程序中调用该dll文件

一.为什么需要dll 代码复用是提高软件开发 效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架, 如ATL.MFC等,它们都以源代码的形式发布.由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”.“白盒复用”的缺点 比较多,总结起来有4点. 暴露了源代码: 容易与程序员的“普通”代码发生命名冲突: 多份拷贝,造成存储浪费: 更新功能模块比较困难. 实际上,以上4点概括起来就是

[C/C++]windows环境下lib和dll的区别和联系(待整理)

c++中共有两种库:1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布)2.LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.(这种方式不是很灵活,因为lib被编译到.exe中,写出的程序体积大,但是只需要发布exe即可,不需要dll文件)共有两种链接方式:

windows环境下lib和dll的区别和联系详细

c++中共有两种库: 1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布) 2.LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.(这种方式不是很灵活,因为lib被编译到.exe中,写出的程序体积大,但是只需要发布exe即可,不需要dll文件) 共有两种链接

VS2010 C#调用C++ DLL文件 【转】

http://www.soaspx.com/dotnet/csharp/csharp_20110406_7469.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用.本篇文章将引导你快速理解这个调用的过程. 步骤 1. 创建一个CSharpInvokeCPP的解决方案: 2. 创建一个C++的动态库项目: 3. 在应用程序设置中,选择“DLL”,其他按照默认选项: 最后点

lib和dll文件的初了解

lib,dll这两样东西在许多编程书中都很少出现,但实际工程中,这两样东西的作用确实非常重要,我觉得c++程序员都有必要了解这两样东西. 首先总共有 动态链接 和 静态链接 这两种链接方式 静态链接: 静态链接使用静态链接库lib,且只在源代码编译时用到(编译期).编译生成静态库时会生成一个.lib文件.lib里面装载了各种类,函数的实现.这种静态链接的lib实际上是多个obj文件的集合. 为什么需要静态链接? 在实际工程中,往往各模块的规模庞大(一堆.h .cpp文件)而编译时,每个.cpp对