2

C# で作成した 32 ビット アプリケーションを 64 ビットに変換するにはどうすればよいですか? Visual Studio でターゲット マシンを 64 ビットに変更して再コンパイルするだけでは、もっと複雑だと思います。

4

7 に答える 7

6

相互運用機能 (COM、WinAPI) を使用せず、ポインターのサイズを想定しない場合は、他のプラットフォームに簡単に切り替えることができます。後者を使用する場合でも、上記の仮定をどこかで行うライブラリを使用しない限り、おそらく問題ありません。

System.IntPtrに関する MSDN を引用するには:

IntPtr 型は、サイズがプラットフォーム固有の整数になるように設計されています。つまり、このタイプのインスタンスは、32 ビットのハードウェアおよびオペレーティング システムでは 32 ビットであり、64 ビットのハードウェアおよびオペレーティング システムでは 64 ビットであると想定されます。

– ただし、他の .NET 型は、プラットフォームに関係なく固定サイズになるように設計されています。

于 2009-10-19T18:46:56.083 に答える
4

実際に64ビットで実行する必要がありますか、それとも64ビットマシンで実行するだけですか?

後者の場合、AnyCPUではなくWin32をターゲットにするようにC#プロジェクトを設定できます。これは、64ビットマシンで実行すると、WOW(32ビット「エミュレーション」)を介して実行されることを意味します。これには、(管理されていない)JETドライバーも32ビットを実行するという利点があります。これで問題が解決するはずです。

于 2009-10-19T19:01:02.387 に答える
2

私の同僚の1人は、彼の個人的なプロジェクトの1つで問題に遭遇しました。Microsoftは64ビット用のJetドライバーを作成しておらず、作成するつもりもありません。

Office 2010には64ビットバージョンがあるので、これは奇妙なことです。

プロジェクトのプロパティをx86( CPUではなく)に設定し、そのままにしておくことをお勧めします。Windows 64ビットは32ビットアプリケーションを問題なく実行できますが、16ビットアプリケーションは実行できません。

于 2009-10-19T19:02:05.553 に答える
2

アプリケーションが何をしているかによって異なります。アンマネージ API、P/Invoke、およびポインター演算を使用する場合、何らかの変更を加えないと 64 ビット プラットフォームで動作しない可能性が十分にあります。それ以外の場合は問題ありません。プラットフォームを指定する必要さえありません。Any CPU をターゲットにするだけで動作するはずです。

于 2009-10-19T18:46:34.997 に答える
1

この質問が示唆するようにするのはどうですか?私はこれまでにこれをやったことがありません、私は注意します。

于 2009-10-19T18:48:06.053 に答える
0

Visual Studio でターゲット マシンを 64 ビットに変更して再コンパイルするだけでは、もっと複雑だと思います。

そうでないかもしれない。外部ライブラリへの依存関係がない場合は、それだけで十分です。それ以上に難しいのは、展開です。64 ビット バイナリを 32 ビット ユーザーに送信したくない場合。したがって、さらに良いことに、「任意の CPU」オプションを選択すると、アプリは、64 ビット マシン (64 ビット バージョンのフレームワークがインストールされている) では 64 ビットとして、どこでも 32 ビット (x86) として自動的に JIT コンパイルされます。そうしないと。

ただし、32 ビットの依存関係がないことを十分に確認する必要があります

于 2009-10-19T18:57:51.277 に答える
0

http://msdn.microsoft.com/en-us/library/ms241064.aspx

他のコメントは良い点です。また、レジストリの仮想化と Wow64 ノードの変更についても理解する必要があります。

于 2009-10-19T18:49:16.753 に答える