【发布时间】: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