我试图为 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而失败?