• 通过dll或def文件提取lib导入库文件


      很多时候第三方库或其他项目提供的库多数会以动态库的形式提供dll以及相应的lib导入库、头文件,不过也有的只是提供dll和头文件,或者也提供了def模块定义(用于导出函数)文件,此时若使用将不得不调用LoadLibrary以及GetProcAddress以获取一系列需要的函数,相对来说比较繁琐;多数人更喜欢使用引入库的方式。

      此时需要通过提供的dll或者def文件来获取lib导入库文件,操作步骤如下:

      1. 若只提供dll,则需通过dumpbin工具提取dll中导出的各个函数;

        dumpbin /exports xxx.dll > xxx.def

      2. 若xxx.def 文件不是标准的def模块定义文件(事实上不是标准的),则修改为标准的格式,若提供了def文件则可以直接通过lib工具转换提取lib引入库文件;

        lib /def:xxx.def /machine:x86 out/:xxx.lib 或 lib /def:xxx.def /machine:x64 out/:xxx.lib

       以上分别为提取x86、x64位的引入库文件;out为可选项,若忽略,则生成的lib引入库文件的名称同def文件名;

      3. 此后便可使用引入库的方式使用提供的库。

      事实上某些时候使用LoadLibrary方式可能比较友好,可以提供一些版本不一致的友好提示等,若采用引入库方式,此时若版本不一致可能出现异常,直接导致程序崩溃的可能而没有预兆、有意义的提示, 若不想使用太多的GetProcAddress又想友好一些,可以采用将导出接口封装,即可通过结构体保存导出接口地址,此时当导出接口的时候可不再导出这些众多接口,而是导出封装后的一个或几个接口而已;便于C接口或C++等调用,当然若只是给C++使用,则可直接导出类即可,这样整个类的公用接口即可直接使用,也可以避免太多的GetProcAddress调用;

  • 相关阅读:
    快速幂&欧拉降幂
    欧拉函数
    素数打表-筛法
    多源最短路径问题(Floyd算法)
    蓝桥杯-本质上升序列
    蓝桥杯-玩具蛇
    SDUT-计算机组成原理
    取消U盘和移动硬盘的GPT保护分区
    Windows 10 上运行 photoshop 等软件出现 loadlibrary failed with error 87 的解决方法!
    做题笔记
  • 原文地址:https://www.cnblogs.com/haomiao/p/5802787.html
Copyright © 2020-2023  润新知