DLL未从文档化的搜索路径加载



我有一个进程,它正在从文档搜索顺序中未列出的位置加载DLL(链接到下面的文档)。我想知道为什么。

以下是我的设置描述:

  1. 我有一个包含a.dll和b.dll的文件夹"c:\foo"
  2. 我有一个python脚本也存储在c:\foo中
  3. python脚本执行LoadLibrary('c:/foo/a.dll')(通过ctypes)
  4. a.dll与b.dll的导入库链接(即使用隐式链接)
  5. 我使用当前目录(比如c:)运行python脚本。它可以是任何东西
  6. b.dll是从c:\foo加载的,即使它不在搜索路径上
  7. 查看进程监视器跟踪,我可以看到所有记录的搜索路径都是先尝试的,但都失败了。然后python进程尝试打开"C:\WINDOWS\assembly\GAC\Microsoft.VC80.CRT.mui\8.0.50727.4053_en-US_1fc8b3b9a1e18e3b\Microsoft.VP80.CRT.mui.DLL",但失败,然后打开C:\foo\b.DLL

因此,似乎是在a.dll的目录中搜索b.dll,尽管文档没有说应该搜索。此外,在查看系统路径后会发生这种情况,这太疯狂了。有人能说明这件事吗?

同样的事情也发生在同样使用.dll.的MatLab脚本中

我正在运行Windows XP SP 3。

这篇MSDN文章解释了默认的搜索顺序。我引用:

  1. lpFileName指定的目录
  2. 系统目录。使用GetSystemDirectory函数获取此目录的路径
  3. 16位系统目录。没有任何函数可以获取此目录的路径,但会对其进行搜索
  4. Windows目录。使用GetWindowsDirectory函数获取此目录的路径
  5. 当前目录
  6. PATH环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径时不使用App Paths键

a.dll可能使用运行时动态链接作为最后手段http://msdn.microsoft.com/en-us/library/ms686944%28VS.85%29.aspx

相关内容

  • 没有找到相关文章

最新更新