37

確かに32ビットのDLL(FreeType)があります(ヘッダー:IMAGE_FILE_MACHINE_I386)。

DllImport を使用して、C# コードから使用したいと考えています。

アプリケーションのターゲットは x86、IntPtr.Size は 4、プロセスは 32 ビットです。

しかし、BadImageFormatException (HRESULT からの例外: 0x8007000B) が発生します。何が間違っている可能性がありますか?

もちろん、私は64ビットのWindows 7を使用しています。

4

11 に答える 11

44

私が理解していることから、特に x86 用にビルドされ、64 ビット オペレーティング システムで実行されているアセンブリは、x86 用にビルドされたライブラリのみを読み込むことができます。そうしないと、BadImageFormatException がスローされます。64 ビット OS では、x86 ライブラリをロードしようとすると、Any CPU または x64 用にビルドされたアセンブリが同じ例外をスローします。

したがって、信じられないほど奇妙なことが起こっていないと仮定すると、プロジェクトのプロパティを開き、[ビルド] タブをクリックして、アプリケーションを x86 としてビルドするように設定していることを確認します。「プラットフォーム ターゲット」が任意の CPU ではなく「x86」に設定されていることを確認します。

または、テスト目的で 64 ビット バージョンの DLL を探すこともできます。

于 2010-04-28T10:39:41.940 に答える
8

[ビルド] -> [プラットフォーム] で [任意の CPU] オプションを使用して dll を再コンパイルします。

ここに画像の説明を入力

于 2013-06-24T22:09:28.540 に答える
7

OK、誤報のようです。それはビット数とは関係がなく、freetype が依存する他の DLL が欠落しているだけでした。ただし、エラー メッセージの方が役立つ場合があります。

于 2010-04-28T11:08:34.767 に答える
5

C# から 64 ビット C DLL を呼び出すと、同じエラーが発生しました。Properties->Build->Platform targetC#を からAny Cpuに手動で変更する必要がありましたx64。どうやらAny Cpu時々 NoCpu です。

于 2016-05-14T17:12:35.930 に答える
4

また、Web アプリケーションについては、IIS 7 で 32 ビット アプリケーションを実行する必要があります。http://www.fishofprey.com/2009/04/badimageformatexception-in-iis-70-on-64.html

于 2012-10-17T05:57:57.453 に答える
2

同様のエラーがありました。デバッグ用の ucrtbase.dll または ucrtbased.dll と、デバッグ用の vcruntime140.dll または vcruntime140d.dll を実行可能ファイルのディレクトリに追加することで解決できました。140 は、使用している Visual Studio のバージョン番号に依存すると思います。

通常、ucrtbase.dll は にありますC:\Windows\System32。vcruntime140.dll は次の場所にありますC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger\x86\vcruntime140.dll

詳細については、http: //blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspxを参照してください。

于 2016-01-21T10:50:57.727 に答える
0

オプション「プロパティ」->「ビルド」->「安全でないコードを許可する」を確認してみてください。

于 2013-12-13T17:56:45.900 に答える