zoukankan      html  css  js  c++  java
  • 库的简介和分类

    一、库的分类:

      静态库:库中代码被嵌入到可执行程序或动态库中,扩展名为“.lib”

      动态库:库中代码不被嵌入到可执行程序或其它动态库中,只在运行时加载,扩展名为“.dll”

      简介:

        1)由于静态库是将代码嵌入到使用程序中,多个程序使用时,会有多份代码,所以代码体积会增大,但是程序运行效率较高。动态库代码只需一份,其它程序通过函数地址以共享方式使用动态库中的代码,所以体积小。

        2)静态库发生变化后,新的代码需要重新链接(嵌入)到使用程序中。动态库发生变化后,只要函数的接口(函数名+参数表+返回类型)未发生变化,使用该动态库的程序无需重新链接。

        3)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库

        4)我们在Windows目录下的system32文件夹中会看到kernel32.dll(处理内存管理和进程调度)、user32.dll(控制用户界面)和gdi32.dll(负责图形操作),windows的大多数API都包含在这些DLL中。

        5)VC中动态库分为三种,分别是:Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)

    二、库的调用

      1、对静态库的调用,须用“#pragma coment(lib,".lib文件的相对路径")”来通知链接器寻找库的路径,C++程序调用C语言静态库(.c生成的.lib)/C语言动态库(.c生成的.dll .lib)中的函数时,须在进行函数声明时在函数原型的前面加上:extern "C";对于动态库的调用,动态库中的函数/类须导出,而在调用动态库中的函数/类时须导入,须将生成的动态库文件(.dll)与调用程序的执行文件(.exe)放在同一目录下,程序才可运行。

      2、C++程序在调用C语言库(C语言静态库/C语言动态库(静态调用时))、C++库(C++静态库/C++动态库(静态调用时))中的函数时,须进行函数声明。

      3、动态库中函数的导出方式有:“_declspec(dllexport)声明导出”和“模块定义文件.def”两种,而动态库中类的导出只能使用“_declspec(dllexport)声明导出”方式。

        导出方式比较:

        “模块定义文件.def”可以为动态库中的函数指定序号,即便日后修改了动态库中的代码,导致其中函数的名称及入口地址发生了改变,但只要其序号保持不变,仍可以在不重新链接的情况下,被正确地调用;

      4、对于动态库的调用分为:静态调用(隐式链接)/动态调用(显式链接);静态调用动态库中的函数时,须在函数原型前加“_declspec(dllimport)”导入函数,静态调用动态库中的类时,可以用类导出的宏开关;动态调用动态库中的函数时,使用动态加载步骤。

        调用方式比较:

        动态调用不需要导入库,因此只要函数接口(函数名+形参表+返回类型)不变,动态库做任何修改都不需要重新链接;若程序使用静态调用的动态库不存在,则程序无法启动,而动态调用只有在LoadLibrary该库时才会报错,别的功能部分正常运行;

  • 相关阅读:
    Ubuntu(14.04LTS)学习札记
    【ABAP系列】SAP ABAP解析XML的示例程序
    【ABAP系列】SAP GUI740 PATCH5出现弹窗BUG
    【ABAP系列】SAP 获取工单和工序的状态
    【MM系列】SAP MM中物料帐下修改物料的价格
    【MM系列】SAP 物料帐下修改物料的价格
    【BASIS系列】SAP /usr/sap//DVEBMGS00满了怎么处理
    【MM系列】SAP MM物料账在制品承担差异功能及配置
    【SD系列】SAP 退货冲账过账成本更新
    【ABAP系列】SAP ABAP中使用for all entries in小结
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6921008.html
Copyright © 2011-2022 走看看