2


MyApp.exeのプラットフォーム フラグを x64 に設定しても、corflags ユーティリティを次のよう
に実行できます。エラーが発生します: 0xC000007B =STATUS_INVALID_IMAGE_FORMAT

私の質問は次のとおりです。x64 にビルドされたアセンブリを x86 として実行できる方法はありますか、それとも単に corflags ユーティリティが「気にしない」ということですか?

4

2 に答える 2

2

「プラットフォーム タイプ」を x64 に設定してバイナリをコンパイルすると、イメージの PE ヘッダーも変更され、64 ビットのみになります。これは、たとえばDependency Walkerを使用して確認できます。

64 ビットの PE ヘッダーを持つことは、32 ビットのみの corflags よりも優先されるようです。.NET の win32 ブートストラッパーは、PE ヘッダーが現在のシステム (32 ビット システムで 64 ビット) と互換性がないことを認識しているようです。これにより、ネイティブ イメージが読み込まれなくなり、付随的にイメージの .NET アセンブリ部分も読み込まれなくなります。

ただし、この方法で PE ヘッダーを更新できるツールは知りません。これは、フラグを変更してイメージを 32 ビットに設定するだけの問題ではないようです。(このブログ投稿を参照してください)

于 2008-11-22T19:46:19.723 に答える
0

ネイティブ DLL をロードしない場合、それを 32 ビットとして再マークできない理由はないからです。それが純粋な MSIL である場合、決定はそれほど意味がありません。

于 2008-11-22T18:07:36.520 に答える