C# DllImport找不到放置在SysWOW64文件夹中的DLL

C# DllImport找不到放置在SysWOW64文件夹中的DLL,c#,dllimport,system32,syswow64,C#,Dllimport,System32,Syswow64,在谷歌搜索了几个小时后,我没有找到这个问题的解决方案 我在非托管C++中开发了一个DLL。由于这是一台64位计算机,我已将该DLL放在SysWOW64文件夹中 另一方面,我有一个用C#开发的Winforms应用程序,它导入DLL中包含的函数。我使用DllImport(“name.dll”),但是会引发System.DllNotFoundException 整个解决方案是针对x64平台配置的 如果我把DLL放在可执行目录中,它就会工作 由于开发的简单性,我希望DLL位于系统文件夹中。我在两台不同的

在谷歌搜索了几个小时后,我没有找到这个问题的解决方案

我在非托管C++中开发了一个DLL。由于这是一台64位计算机,我已将该DLL放在SysWOW64文件夹中

另一方面,我有一个用C#开发的Winforms应用程序,它导入DLL中包含的函数。我使用DllImport(“name.dll”),但是会引发System.DllNotFoundException

整个解决方案是针对x64平台配置的

如果我把DLL放在可执行目录中,它就会工作

由于开发的简单性,我希望DLL位于系统文件夹中。我在两台不同的电脑(台式电脑和笔记本电脑)上开发这个项目。PC有32位的平台,而笔记本是64位的,有不同的文件夹

要在两台计算机上同步项目,我使用subversion存储库。显然,我可以编写一个POST生成事件来将DLL从C++项目文件夹复制到主可执行文件的输出文件夹,但是每次从笔记本电脑移到PC机,反之亦然,我都需要更改POST命令。 知道为什么在系统文件夹中找不到DLL吗?最重要的是,有没有办法解决这个问题

谢谢 詹姆

整个解决方案是针对x64平台配置的

SysWOW64
实际上是32位系统目录。对于32位程序,文件系统重定向程序将
system32
重定向到
SysWOW64

  • 对于32位进程,系统目录为
    SysWOW64
  • 对于64位进程,系统目录为
    system32
这可以解释你面临的问题


无论如何,您确实不应该修改系统目录。它属于系统,应用程序不应修改它。

如果解决方案编译为x64,则必须将dll放入
%SystemRoot%\System32
文件夹中。`%SystemRoot%\SysWOW64`由32位应用程序(x86)使用。当我使用%SystemRoot%\System32时,系统实际上会将文件复制到SysWOW64。。。在内部,如果系统是x64,系统可能会自动将System32转换为SysWOW64,作为一种别名