4

「任意の CPU」用にコンパイルされた WinForms アプリを、アプリを再コンパイルせずに 64 ビット サーバー上で「x86」として実行するように構成できますか? 具体的には、この目的を達成するための app.config 設定またはコントロール パネル アプレットを探しています。お客様のクライアントはすべて x86 ですが、サーバーは x64 です。管理者がシステムを構成および監視できるように、サーバーに WinForms アプリをインストールしたいと考えています。サーバーのためだけに再コンパイルしたくはありません。

4

2 に答える 2

11

http://www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspxから

ただし、コードがコンパイルされた後でも、このデフォルトの動作を制御およびオーバーライドできます。SDK には corflags.exe という便利なツールがあり、「anycpu」でコンパイルされたコードが 64 ビット環境で 32 ビット プロセスを使用するように強制できます。

このユーティリティの使用方法は、 http://msdn.microsoft.com/en-us/library/ms164699( VS.80 ).aspx にあります。

于 2008-10-09T14:58:49.867 に答える
1

マネージド コードを正しく記述した場合、構成は必要ありません。64 ビット マシンに適切なフレームワークがインストールされている限り、JIT プロセスは 32 ビット要件と 64 ビット要件の違いに対処します。

独自のコードで考慮する必要がある唯一のことは、P/Invoke を実行しているかどうかです。その場合、HANDLE または void* 型を使用する API 関数を呼び出すときはいつでも、System.Int32 ではなく、常に System.IntPtr を使用するようにする必要があります。.NET の世界では、int データ型は 64 ビット マシン上でも常に 32 ビットです。同様に、アーキテクチャに関係なく、long は常に 64 ビットです。

ただし、IntPtr は常に void* のサイズであるため、実行しているマシンのアーキテクチャに応じて適切に JIT が異なるサイズになります。

于 2008-10-09T15:08:51.517 に答える