执行流程中的托管和非托管dll检索

时间:2014-08-04 02:13:58

标签: c# dll unmanaged

我有一个第三方托管dll,要求另一个不受管理的dll。 C#代码在调试时调用它在我的机器上工作正常,而不是在我把它放在服务器上。

似乎这是因为服务器上安装的版本与我的机器不同。但是想知道dll检索流程(托管/非托管)是如何工作的。

到目前为止,我能理解这一点:

托管dll

  1. RunTime首先查看./(最可能是bin)文件夹
  2. 如果找不到,请检查GAC(dll何时安装在那里?)
  3. 非托管dll

    1. 可以在托管dll中使用绝对路径调用,在这种情况下应安装在那里。
    2. 如果没有,则回退将成为注册表路径,在那种情况下将从那里获取。
    3. 以上是否正确?

      谢谢

1 个答案:

答案 0 :(得分:0)

非托管DLL搜索顺序遵循以下规则:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

简而言之:

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