【问题标题】:Attempting to load a DLL on Windows using LoadLibrary when a dependent DLL is missing在缺少依赖 DLL 时尝试使用 LoadLibrary 在 Windows 上加载 DLL
【发布时间】:2010-11-24 10:43:19
【问题描述】:

我有一个在 Windows 上使用 LoadLibrary 来动态加载插件的应用程序。然而,一些插件还有其他依赖的 DLL,例如数据库客户端 DLL。 当您尝试加载此类 DLL 并且其中一个依赖的 DLL 不存在时,您会看到一个令人讨厌的 Windows 对话框:

“程序无法启动,因为您的计算机中缺少 xxx.ddl。请尝试重新安装程序以解决此问题。”

有什么简单的方法可以避免这个对话框吗?我希望有人可以使用 LoadLibraryEx 并传递一个标志,上面写着“不要给我那个烦人的对话框”,但它看起来不像。

我希望应用程序处理该错误,而不是 Windows 为我处理,尤其是消息的文本不正确(问题不在于程序无法启动,程序运行得很愉快,就是无法加载这个插件)。

我想避免的是必须重写具有这些外部依赖项的插件,以使它们自己动态加载任何依赖模块,然后查询任何入口点。

无论如何,任何建议都将不胜感激。

【问题讨论】:

  • LoadLibraryEx 有很多标志。
  • ruslik:LoadLibraryEx 可能有很多标志,但没有一个,至少没有记录在 MSDN 上,控制这种行为。

标签: c windows


【解决方案1】:

使用SetErrorMode()。在加载 DLL 之前将其与 SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS 一起使用,之后与 0 一起使用。

【讨论】:

  • 那行得通。我没有真正阅读 LoadLibrary 文档,这很糟糕!备注部分的第一句。呵呵。
【解决方案2】:

来自 MSDN:

要启用或禁用加载器在加载 DLL 期间显示的错误消息,请使用 SetErrorMode 函数。

Link here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2012-01-09
    • 2016-06-07
    相关资源
    最近更新 更多