2010-11-24 116 views
11

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

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

有没有简单的方法可以避免这个对话框?我希望可以使用LoadLibraryEx并传递一个标志,表示“不要给我那个讨厌的对话框”,但它看起来并不像它。

我希望应用程序能够处理该错误,而不是Windows为我处理它,特别是当消息文本不正确时(问题不在于程序无法启动,程序运行的很开心,它只是无法加载这个插件)。

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

无论如何,任何建议将受到感谢。

+0

`LoadLibraryEx`有很多标志。 – ruslik 2010-11-24 10:48:09

+0

ruslik:LoadLibraryEx可能有很多标志,但是没有任何标志,至少在MSDN上没有记录,可以控制这种行为。 – 2010-11-24 13:18:13

回答

13

使用SetErrorMode()。在加载DLL之前使用SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS,之后使用0

5

从MSDN:

要启用或DLL加载过程中由装载机显示禁用错误消息,请使用SetErrorMode函数。

Link here