0

我正在尝试在 Visual C# 2010 中使用 Tamas Szalay 的 FFTW 的 C# 端口,当我尝试使用 FFTW 中的函数(在本例中为 fftw.malloc)时出现上述错误。如果我手动将 dll 移动到项目的 /bin/debug/ 文件夹中,该错误就会消失,但后来我得到了

An attempt was made to load a program with an incorrect format.
(Exception from HRESULT: 0x8007000B)
Method: IntPtr malloc(Int32)

这让我觉得我有一个更深层次的问题。

可能相关:我在 x64 机器上运行它,DependencyWalker 说 fftwlib.dll 是为 x86 构建的。

4

2 回答 2

2

只是想在这里澄清一下,因为我正在做同样的事情:我使用的是 x64 机器,但我将 Visual Studio 中解决方案的平台设置为 x86,以便我可以使用编辑并继续。

  1. FFTW DLL 有 x86 和 x64 版本。出于显而易见的原因,我将它们保存在单独的目录中。

  2. 如果您想强制使用 32 位 DLL,则将您的平台设置为 x86 并将 32 位 FFTW DLL 复制到项目的起始目录(默认到它构建的任何位置;例如,.\bin\Debug) .

As an aside, I had to add CallingConvention = CallingConvention.Cdecl) to every DLLImport statement in FFTWlib otherwise VS2010 would complain.

于 2012-02-27T20:18:16.820 回答
1

如果您使用外部 32 位代码,则必须将项目 CPU 配置设置为 x86 而不是 Any CPU。

任何 CPU 都是默认的 Visual Studio 配置,如果您在 64 位操作系统上运行,它将默认编译为 64 位代码,问题是如果您需要像您的情况一样加载 32 位 DLL,您将获得格式错误。

http://cl.ly/3s1J2q3u3E0n2F2y0z1K <--它所在的屏幕截图。

于 2012-02-07T04:18:29.833 回答