正确捕获LoadLibrary()错误

Fre*_*abe 6 c++ windows plugins qt loadlibrary

我正在研究一种在Windows XP和Windows Vista之间的所有Windows版本上运行的C++软件.在我的代码中,我开发了一个链接标准库(Qt库)的DLL .一旦部署了我的软件,用户在他的系统上没有完全相同的Qt构建,但配置略有不同并不罕见.可能存在禁用的功能(因此它们的Qt构建不会导出相同的符号集),或者甚至可能以使库二进制文件与原始文件不兼容的方式更改库.

在某些时候,我通过LoadLibrary()调用加载我的DLL.这可以吸引用户系统上的任何Qt库.如果我很幸运,他们的Qt构建与我在开发DLL时使用的内容兼容,因此LoadLibrary()成功.但是,根据他们对Qt构建所做的更改,LoadLibrary()调用有时会失败

  • "指定的模块无法找到."; 如果他们的Qt构建包含比我的Qt构建更少的DLL,通常会发生这种情况.所以我的DLL试图加载例如QtFoo.dll但由于这个dll不是他们的Qt构建的一部分,加载我的DLL失败.
  • "无法找到指定的程序."; 如果他们更改了他们的Qt构建以便禁用某些功能,这通常会发生这种情况,这会导致导出的符号减少.

我的问题是:我怎样才能优雅地捕捉到这些错误?对,我只是使用GetLastError(),然后打印上述两个消息之一.然而,这将是多少,如果我知道更多有用的模块无法找到,或者缺少的程序.我注意到,当在资源管理器中运行一个链接缺少DLL的应用程序时,资源管理器设法产生一个很好的'由于缺少所需的库blah.dll而无法加载应用程序foo'.是否有一些API可用于获取有关LoadLibrary()调用失败原因的更多信息?

MSa*_*ers 1

可以MapAndLoad从 ImageHLP.DLL 可能有帮助。它返回一个 LOADED_IMAGE 结构。