我正在尝试在Visual C#2010中使用Tamas Szalay的C# port of FFTW,当我尝试使用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构建的。
答案 0 :(得分:2)
我想在这里澄清一下事情,因为我正在做同样的事情:我使用的是x64机器,但我在Visual Studio中将解决方案的平台设置为x86,所以我可以使用编辑并继续。
有FFTW DLL的x86和x64版本。出于显而易见的原因,我将它们保存在不同的目录中。
如果要强制使用32位DLL,则将平台设置为x86并将32位FFTW DLL复制到项目的起始目录(默认为构建的位置;例如, \ BIN \调试)。
顺便说一下,我必须在FFTWlib中的每个CallingConvention = CallingConvention.Cdecl)
语句中添加DLLImport
,否则VS2010会抱怨。
答案 1 :(得分:1)
如果使用外部32位代码,则必须将项目CPU配置设置为x86而不是任何CPU。
任何CPU都是默认的Visual Studio配置,如果你在64位操作系统上运行,它默认会编译为64位代码,问题是如果你需要像你的情况那样加载32位DLL,你会出现格式错误。
http://cl.ly/3s1J2q3u3E0n2F2y0z1K< - 截屏位置。