gpt4 book ai didi

C++:即使缺少第 3 方 DLL 也允许程序运行?

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:15 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

  1. 对于 dll xxx.dll,您将链接器配置为使用“delayload”
  2. 直到您从 dll 中调用任何函数,它都不会被加载,即使 dll 不存在,您的应用程序也会成功启动
  3. 您使用 LoadLibrary 检查 xxx.dll 是否可用。
  4. 如果 LoadLibrary 失败 - 您使用 xxx.dll 禁用模块
  5. 如果 LoadLibrary 成功 - 您卸载它(您不需要动态加载 - 它仅用于测试 dll 的存在)并像定期链接一样使用库 - 无需使用任何 xxx 修改代码。 dll相关功能

关于C++:即使缺少第 3 方 DLL 也允许程序运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com