DLL未从文档搜索路径加载

时间:2011-07-01 10:27:53

标签: python matlab dll process-monitor

我有一个进程,它从未在文档化搜索顺序中列出的位置加载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.VC80.CRT.mui.DLL”,然后它打开c:\ foo \ b.dll。
  8. 所以,似乎a.dll的目录正在搜索b.dll,即使文档没有说它应该是。此外,这是在查看系统路径后发生的,这是疯狂的。任何人都可以对此有所了解吗?

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

    我正在运行Windows XP SP 3。

    This MSDN article解释了默认搜索顺序。我引用:

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

1 个答案:

答案 0 :(得分:0)

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