通过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调用;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架