C++ 如何批量加载 dll?

l357630798 2020-12-29 02:59:46
RT: 工作中经常使用到 dll ,频繁使用 LoadLibrary 太繁琐。有没有哪位大神有高质量代码参考一下,如何管理多个 dll 的类参考学习一下?
谢谢!
...全文
685 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
an_bachelor 2021-02-06
  • 打赏
  • 举报
回复
引用 9 楼 l357630798 的回复:
[quote=引用 7 楼 陈仲甫 的回复:][quote=引用 5 楼 l357630798 的回复:][quote=引用 3 楼 陈仲甫 的回复:]你可以使用隐式链接 默认会在启动程序时批量加载dlls,缺一个都不能继续运行。
需要的就是使用LoadLibrary[/quote]隐式链接不需要你去调用,获得一样的结果,怎么得出结论说“需要的就是。。。”,你并真的没弄懂这个问题,下结论之前先确认。[/quote] 兄台,你理解错了。隐式链接,直接批量加在属性里肯定是知道的呢(估计没几个人不知道吧?),这里讨论的重点是如何用LoadLibrary大批量管理.dll文件。 请考量如下场景:1. 很多时候,客户只提供了20+个 .dll 文件,每个.dll 文件里面又需要导出20+条函数,但是并没有.lib文件。我们改如何处理,使用最少的代码量行数来完美的完成任务。 2. 或者,你逆向工程的时候,也是没有.lib文件的,只有大批量的 .dll 。 谢谢~ 你不可能写20+个LoadLibrary, N个 GetProcAddress 然后判断函数指针是否为空吧?如何才能写出优雅的代码?请思考。 [/quote] OK 提供给你dll调用,也提供原型,却不能提供lib文件,我只能说这种情况比较不专业,正常的情况下一个库甚至默认要给你符号文件,以便调试的。 “写20+个LoadLibrary, N个 GetProcAddress 然后判断函数指针是否为空”为什么不行?你们代码有限制行数吗? 如果你接触过大一点的工程,没干正事之前,20个类似的动作重复真不算什么,甚至可能服务都不止开20种; 写个宏也是代码不多又优雅的办法,这个过程对有一定开发经验的开发者,应该是不假思索的。 我给你的msdn页面,其实要你看的是用一个def文件提供符号,并利用库作者给你的原型链接到一起的方法,这也是极为常见的方式,我真想不出dll使用有特别高深或高明的知识。。 “需要的就是使用LoadLibrary”这是你说的,所以你最终用了什么独特的办法,能绕过函数原型甚至符号的声明?据我所知不可能。 当然,你可以加载一个函数获得某个类指针,直接从这个指针调用方法(又一种普通、没什么高明的方式),但是按你说的前提,库的开发者甚至不能给你.lib,要他为你重写代码,将导出方式从一个个方法变成一个结构/类,那显然是矛盾的。 讲真,话这么多字讨论这种问题太不值得了。。。
an_bachelor 2021-02-01
  • 打赏
  • 举报
回复
引用 5 楼 l357630798 的回复:
[quote=引用 3 楼 陈仲甫 的回复:]你可以使用隐式链接 默认会在启动程序时批量加载dlls,缺一个都不能继续运行。
需要的就是使用LoadLibrary[/quote]隐式链接不需要你去调用,获得一样的结果,怎么得出结论说“需要的就是。。。”,你并真的没弄懂这个问题,下结论之前先确认。
l357630798 2021-02-01
  • 打赏
  • 举报
回复
引用 7 楼 陈仲甫 的回复:
[quote=引用 5 楼 l357630798 的回复:][quote=引用 3 楼 陈仲甫 的回复:]你可以使用隐式链接 默认会在启动程序时批量加载dlls,缺一个都不能继续运行。
需要的就是使用LoadLibrary[/quote]隐式链接不需要你去调用,获得一样的结果,怎么得出结论说“需要的就是。。。”,你并真的没弄懂这个问题,下结论之前先确认。[/quote] 兄台,你理解错了。隐式链接,直接批量加在属性里肯定是知道的呢(估计没几个人不知道吧?),这里讨论的重点是如何用LoadLibrary大批量管理.dll文件。 请考量如下场景:1. 很多时候,客户只提供了20+个 .dll 文件,每个.dll 文件里面又需要导出20+条函数,但是并没有.lib文件。我们改如何处理,使用最少的代码量行数来完美的完成任务。 2. 或者,你逆向工程的时候,也是没有.lib文件的,只有大批量的 .dll 。 谢谢~ 你不可能写20+个LoadLibrary, N个 GetProcAddress 然后判断函数指针是否为空吧?如何才能写出优雅的代码?请思考。
l357630798 2021-02-01
  • 打赏
  • 举报
回复
兄台,你理解错了。很多时候,客户只提供了.dll文件,并没有.lib文件。或者,你逆向工程的时候,也是没有.lib文件的,谢谢~ 隐式链接,直接批量加在属性里肯定是知道的呢,这里讨论的重点是如何用LoadLibrary大批量管理.dll文件。
l357630798 2021-01-30
  • 打赏
  • 举报
回复
问题自己解决了,结贴给分吧。
l357630798 2021-01-30
  • 打赏
  • 举报
回复
引用 3 楼 陈仲甫 的回复:
你可以使用隐式链接 默认会在启动程序时批量加载dlls,缺一个都不能继续运行。
需要的就是使用LoadLibrary
l357630798 2021-01-30
  • 打赏
  • 举报
回复
引用 2 楼 Eleven 的回复:
自己写个基类,构造函数LoadLibrary(),析构函数调用FreeLibrary,提供供子类调用的GetProcAddress()定位函数的接口
这种方式有个不好之处在于,失败了不好处理。
an_bachelor 2021-01-03
  • 打赏
  • 举报
回复
你可以使用隐式链接 默认会在启动程序时批量加载dlls,缺一个都不能继续运行。
Eleven 2020-12-31
  • 打赏
  • 举报
回复
自己写个基类,构造函数LoadLibrary(),析构函数调用FreeLibrary,提供供子类调用的GetProcAddress()定位函数的接口

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧