2

我试图为 QtSql 使用 QOCI 插件,直到遇到一些问题: Why QOCI plugin is not 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而失败?

4

1 回答 1

5

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

于 2011-06-03T16:45:46.600 回答