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マシンを使用していますが、編集を使用して続行できるように、VisualStudioのソリューションのプラットフォームをx86に設定しました。

  1. FFTWDLLにはx86バージョンとx64バージョンの両方があります。明らかな理由で、それらを別々のディレクトリに保管しています。

  2. 32ビットDLLを強制的に使用する場合は、プラットフォームをx86に設定し、32ビットFFTW DLLをプロジェクトの開始ディレクトリにコピーします(デフォルトでは、ビルドする場所になります。たとえば、。\ bin \ Debug)。 。

余談ですが、FFTWlibのすべてのステートメントに追加するCallingConvention = CallingConvention.Cdecl)必要DLLImportがありました。そうしないと、VS2010が文句を言います。

于 2012-02-27T20:18:16.820 に答える
1

外部の 32 ビット コードを使用している場合は、プロジェクトの CPU 構成を任意の CPU ではなく x86 に設定する必要があります。

任意の CPU がデフォルトの Visual Studio 構成です。64 ビット OS で実行している場合、デフォルトで 64 ビット コードとしてコンパイルされます。問題は、あなたの場合のように 32 ビット DLL をロードする必要がある場合、フォーマットを取得することです。エラー。

http://cl.ly/3s1J2q3u3E0n2F2y0z1K <-- それが配置されているスクリーンショット。

于 2012-02-07T04:18:29.833 に答える