两种库
一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。

一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

(所以无论是动态链接库还是静态链接库,都会有lib文件)

两种链接方式
动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL中函数的可执行代码所需的信息。
静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。

静态链接库的使用:

  • 需要的文件: 头文件 .h 、静态库 .lib
  • 头文件.h中有函数的声明,使用静态链接库的项目需要引用该文件才能编译通过
  • .lib包含了实际执行代码、符号表等等
  • 加载lib的方法:  法1.使用编译链接参数或者VS的配置属性来设置    法2.使用pragma编译语句,例如pragma comment(lib,"a.lib")
  • .lib中的指令将全部被直接包含在最终生成的 EXE 文件中

动态链接库的使用:

一、动态库的隐示调用:

  • 需要的文件: 头文件 .h 、动态链接库的.lib文件,动态链接库的dll文件
  • 头文件.h和静态链接库使用时的作用一样,使用动态链接库中的函数的项目需要引用该文件才能编译通过
  • .lib包含了函数所在的DLL文件和文件中函数位置的信息,.dll包含了实际执行代码、符号表等等
  • 加载lib的方法:lib是编译链接是用的,跟使用静态链接库时一样有两种方法:法1.使用编译链接参数或者VS的配置属性来设置    法2.使用pragma编译语句,例如pragma comment(lib,"a.lib")
  • 加载dll的方法:dll是运行时用的,链接了lib之后形成的EXE可执行文件中已经有了dll的信息,所以只要把dll放在和exe同一个目录下就可以了,运行时根据EXE需要自动加载dll中的函数

二、动态库的显式调用:

  • 需要的文件: 动态链接库的dll文件
  • 不需要.h头文件和.lib文件,因为LoadLibrary之后可以使用getProcAddress来查找一个函数的地址从而调用该函数 (显式调用的前提是使用者需要知道想调用的函数的名字、参数、返回值信息,也就是说虽然编译链接用不上.h头文件,但是调用者编程时可能还是要看.h文件作参考来知道函数名字、参数、返回值信息)

显式调用动态库步骤:

1、创建一个函数指针,其指针数据类型要与调用的 DLL 引出函数相吻合。

2、通过 Win32 API 函数LoadLibrary()显式的调用DLL,此函数返回 DLL 的实例句柄。
3、通过 Win32 API 函数GetProcAddress()获取要调用的DLL 的函数地 址,把结果赋给自定义函数的指针类型。
4、使用函数指针来调用 DLL 函数。

5、最后调用完成后,通过 Win32 API 函数FreeLibrary()释放DLL 函数。

最后,特别说明下载使用C#显式调用dll时会更加简单,如下:

[DLLImport(“DLL文件”)]

修饰符 extern 返回变量类型 方法名称 (参数列表)

描述如下:

DLL文件:包含定义外部方法的库文件。

修饰符: 访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。

返回变量类型:在DLL文件中你需调用方法的返回变量类型。

方法名称:在DLL文件中你需调用方法的名称。

参数列表:在DLL文件中你需调用方法的列表。

动态链接库和静态链接库的区别相关推荐

  1. 动态链接库与静态链接库的区别

    动态链接库与静态链接库的区别 库文件的概念 库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量.函数或类.库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接 ...

  2. 区别动态链接库和静态链接库

    动态链接库和静态链接库: 首先理解两种生成可执行程序的链接方式: 动态链接: 链接动态库,只是在生成的程序中记录库中的函数信息表,并没有将具体代码实现写入程序中,所以依靠动态链接生成的程序在运行时,需 ...

  3. Windows下动态链接库和静态链接库的生成以及调用

    Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...

  4. 动态链接库与静态链接库

    动态链接库与静态链接库 首先纠正所谓"静态连接就是把需要的库函数放进你的exe之中"的说法.在真实世界中,有三个概念:Use   static   libary,   static ...

  5. c++动态链接库及静态链接库的生成与使用

    c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...

  6. linux 生成和使用动态链接库和静态链接库的Makefile编写

    引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...

  7. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

    动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...

  8. 关于动态链接库和静态链接库

    关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...

  9. BCG 动态链接库和静态链接库

    4.1 动态链接库和静态链接库 使用BCG界面库的应用程序,发布时可以以动态库或静态库的方式链接. BCG已经在BCGCBProInc.h文件中定义好了链接选项,我们只需要修改工程MFC的工程配置即可 ...

最新文章

  1. 基于Spark ML 聚类分析实战的KMeans
  2. python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)
  3. apache camel 相关配置_小白在 linux 系统部署apache、mysql、Laravel 环境学习笔记!
  4. 邮件服务器fixpost服务(1)
  5. linux 下Python调用C模块
  6. 合并DateFrame之—— append()
  7. python echarts mysql python_Django中从mysql数据库中获取数据传到echarts方式
  8. 呵,你会51单片机的精确延时吗?
  9. 【BZOJ - 3436】小K的农场(差分约束)
  10. Salt 系统初始化
  11. 一种快速构造和获取URL查询参数的方法:URLSearchParams
  12. 深度学习2.0-44.对抗生成网络-GAN
  13. c语言编写面向对象的类
  14. MGWR多尺度地理加权回归
  15. Mybatis Plus分页Page total始终为0
  16. 读史笔记(I) 日光之下
  17. Autoware Docker安装和仿真
  18. 逍遥模拟器安卓7.1 xposed安装
  19. 紫光信息港 软件测试,紫光展锐 信息化软件工程师面经
  20. selenium必应搜索,获取标题以及url

热门文章

  1. linux mdadm命令详解
  2. 笔记整理--Linux守护进程
  3. 218本巴菲特、芒格及段永平推荐书籍下载 (2012-03-31 22:53:28)
  4. 中缀表达式转后缀表达式两位数_什么是圆形磁动势?永磁无刷电机是怎么转起来的?...
  5. 某程序员哀叹:做码农真的很悲哀,有的35岁就没人要了
  6. 2022-2028年全球与中国饲料核苷酸行业市场需求预测分析
  7. 负载均衡技术应用介绍
  8. ES6代码转ES5教程(babel安装使用教程)
  9. pdf文件转换ppt可编辑_创建,转换和编辑PDF文件的免费工具
  10. Origin2018怎么画出向上向下的柱状图