LoadLibrary失败,依赖walker没有帮助

时间:2011-06-03 14:33:51

标签: winapi qt dll loadlibrary dependency-walker

我试图为QtSql使用QOCI插件,直到我遇到一些问题: Why QOCI plugin isn't working

然而事实证明这是一个图书馆加载问题(至少我是这么认为的),所以我决定改变问题的主题,因为这是一个新问题。

我有一个dll文件(称为qsqloci4.dll)当我尝试使用LoadLibrary加载它时,它失败并且GetLastError返回ERROR_MOD_NOT_FOUND。当我尝试使用LoadLibraryEx加载它时,第三个参数是DONT_RESOLVE_DLL_REFERENCES,它成功加载(不返回NULL)。

所以,我认为这是一个依赖问题。我用依赖walker打开了dll文件,有2个文件无法找到:QtCore4.dll和QtSql4.dll。 但是,这些文件位于应用程序的工作目录中,并且成功加载了依赖于这些dll的其他dll文件(例如qsqlpsql4.dll)。

其他dll(由依赖者walker定位)是:

  • oci.dll:与QtCore4.dll和QtSql4.dll位于同一文件夹中,表示我的应用可以访问它
  • kernel32.dll:我相信通过我的应用找到最简单的dll
  • msvscr80.dll:可以成功加载使用它的其他dll文件。

这是我的问题:给定依赖者walker说:“你有除qt之外的所有dll”并且我确信我有qt dll,还有什么其他原因可以使LoadLibrary失败并使用ERROR_MOD_NOT_FOUND?

1 个答案:

答案 0 :(得分:5)

您需要在动态模式下运行Dependency Walker,因为它是一些将通过显式链接解析的依赖项。我相信您可以从“个人资料”菜单中执行此操作。