在缺少相关DLL时,尝试使用LoadLibrary在Windows上加载DLL

时间:2010-11-24 10:43:19

标签: c windows

我有一个在Windows上使用LoadLibrary来动态加载插件的应用程序。但是,某些插件具有其他依赖DLL,例如数据库客户端DLL。 当您尝试加载这样的DLL并且其中一个从属DLL不存在时,您会得到一个令人讨厌的Windows对话框:

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

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

我想要的是应用程序处理该错误,而不是Windows为我处理它,特别是因为消息的文本不正确(问题不在于程序无法启动,程序运行得非常愉快,它只是无法加载此插件)。

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

无论如何,我们将非常感激地收到任何建议。

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:5)

来自MSDN:

  

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

Link here