zoukankan      html  css  js  c++  java
  • 通过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调用;

  • 相关阅读:
    HDU 1059 Dividing(多重背包)
    新华网,要厚道
    js与DOM初步:访问html元素
    Hacker News网站的文章排名算法工作原理
    做技术,是个精益求精的事情
    百度贴吧客户端(Android)网络通信行为分析
    Storm同时接收多个源(spout和bolt)
    各种流处理系统的比较
    Kafka学习
    关联规则推荐及Apriori算法
  • 原文地址:https://www.cnblogs.com/haomiao/p/5802787.html
Copyright © 2011-2022 走看看