.NET P/Invoke对DllImportAttribute.Value属性的澄清

.NET P/Invoke对DllImportAttribute.Value属性的澄清,.net,pinvoke,dllimport,.net,Pinvoke,Dllimport,说 如果未提供路径,则DLL在运行时必须位于当前路径中 时间 这是指当前正在执行的目录还是系统路径环境变量中列出的目录之一 TIA。两者都不是。Windows必须能够通过以下方式之一找到DLL: 与EXE相同的目录 SetDllDirectory()中指定的目录(如果使用) 系统目录(默认情况下为c:\windows\system32) 16位系统目录(默认情况下为c:\windows\system) 当前默认目录(Environment.CurrentDirectory) PATH环境变量中

如果未提供路径,则DLL在运行时必须位于当前路径中 时间

这是指当前正在执行的目录还是系统路径环境变量中列出的目录之一


TIA。

两者都不是。Windows必须能够通过以下方式之一找到DLL:

  • 与EXE相同的目录
  • SetDllDirectory()中指定的目录(如果使用)
  • 系统目录(默认情况下为c:\windows\system32)
  • 16位系统目录(默认情况下为c:\windows\system)
  • 当前默认目录(Environment.CurrentDirectory)
  • PATH环境变量中列出的目录之一

您应该非常喜欢第一个,而回退到第二个。

太好了,感谢并添加,c:\windows\syswow64适用于64位机器?我正在试图了解这一切是如何在WCF环境中工作的,在该环境中,服务使用本机DLL。在这种情况下,这些本机不是从与服务libs相同的目录加载的,因此根据架构从system32或syswow64加载。这是正确的吗?这是自动的,32位进程被重定向到syswow64而不是system32。在64位操作系统上,syswow64包含32位DLL。它们是为32位前男友准备的。System32包含64位DLL。向后看,但它是有效的。而且,由于64位exe无法加载32位dll,反过来,32位exe也无法加载64位dll,因此路径将不包括另一个。