我有一个与某些第三方动态库链接的c++应用程序。我的一些主要类继承自这些库,并对这些库进行函数调用,等等。我的应用程序在理论上不包含那些库的情况下运行(即,如果我手动剥离了与那些库有关的所有代码和引用,它将仍然可以正常使用),但功能会受到更多限制。如果可以进行类比,请想象我已经创建了Windows记事本克隆,并包括一个3rd party库,该库允许用户在文档中嵌入图片和视频。

分发应用程序时,我的客户端可能没有安装那些库。有没有一种方法可以让我的程序检测所需的DLL库是否存在,并且如果未安装所有相关代码,则直接忽略它们?

当前,如果我在没有安装第三方库的情况下运行我的应用程序,它将显示与缺少的DLL相关的错误并崩溃。一个明显的解决方案是简单地发布应用程序的两个版本……一个不带外部依赖关系,一个不带外部依赖关系,但是我想避免像这样独立地管理两个产品。

最佳答案

有这样的选项“延迟加载dll”

  • 对于dll xxx.dll,您将链接器配置为使用“延迟加载”
  • 直到您从dll调用任何函数,它都不会被加载,即使该dll不存在,您的应用程序也会成功启动
  • 您使用LoadLibrary检查xxx.dll是否可用。
  • 如果LoadLibrary失败-您使用xxx.dll
  • 禁用模块
  • 如果LoadLibrary成功-您将其卸载(不需要动态加载-仅用于测试dll的存在)并使用库,就像它定期链接一样-无需使用任何与xxx.dll相关的代码来修改代码功能
  • 10-07 19:28
    查看更多