【问题标题】:DllImport does not find a DLL placed in SysWOW64 folderDllImport 找不到放置在 SysWOW64 文件夹中的 DLL
【发布时间】:2015-07-15 15:07:05
【问题描述】:

经过几个小时的谷歌搜索,我没有解决这个问题。

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

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

整个解决方案是为 x64 平台配置的。

如果我将 DLL 放在可执行目录中,它就可以工作。

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

为了在两台计算机上同步项目,我使用 subversion 存储库。显然,我可以编写一个 Post Build 事件,将 DLL 从 C++ 项目文件夹复制到主可执行文件的输出文件夹,但每次从笔记本电脑移动到 PC 时,我都需要更改 Post build 命令,反之亦然。

知道为什么在系统文件夹中找不到 DLL 吗?最重要的是,有没有办法解决它?

谢谢 詹姆

【问题讨论】:

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

标签: c# dllimport system32 syswow64


【解决方案1】:

整个解决方案是为 x64 平台配置的。

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

  • 对于 32 位进程,系统目录为 SysWOW64
  • 对于 64 位进程,系统目录为 system32

这将解释您面临的问题。

不管怎样,你真的不应该修改系统目录。它属于系统,应用程序不应修改它。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2011-02-25
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多