私はWindows 7とx64 CPUを使用しています。 Visual Studioの "x64"オプションで常にコンパイルしなければならないということですか? "dll"については、x64アプリケーションからx86 dllを使用できますか?おそらく他にも懸念がありますか?ビルド(x86 x64またはAnyCpu)で使用するCPUを知るには?
答えて
には、各オプションの概要が含まれています。ここで
が小さいの引用です:
デフォルト設定で、任意のCPU、アセンブリは、それが現在実行されているCPU上でネイティブ を実行することを意味します。つまり、 は、64ビットマシンでは64ビットとして、32ビットマシンでは32ビットとして実行されます。 アセンブリが64ビットアプリケーションから呼び出された場合、それは 64ビットアセンブリとして実行されます。
プロジェクトがx86に設定されている場合、プロジェクトは、 が32ビットプロセスとしてのみ実行されることを意味します。 64ビットプロセスは、X86としてアセンブリセットに を呼び出すことができません。 x86 としてプロジェクトを設定する理由には、 32ビットでのみ使用可能なネイティブDLLに依存するか、または32ビットと仮定してネイティブ呼び出しを行うことが含まれます。 x86用にマークされたアプリケーションと アセンブリは、引き続き64ビットWindows上で実行できます。ただし、 はWOW64で動作します。 Visual Studio自体は、32ビットアプリケーションであるため、このエミュレーション モードで実行されます。
x64にプロジェクトを設定すると、アセンブリが64ビットWindowsで を実行する必要があることが指定されます。アセンブリを32ビットの Windowsで実行しようとした場合、またはアセンブリを32ビットプロセスから呼び出すと、 ランタイムエラーが発生します。
は一般を言えば、あなたはすべての時間をAnyCpu
使用する必要があります。
互換性の問題が予想される特別な理由がある場合は、必要に応じてx86またはx64を選択する必要があります。
コメントに記載されているように、特定のアーキテクチャに対して構築されたDLLでは、アセンブリを特定の方法で構築する必要があります。これは、が必要な場合はとする必要があります。
私は何らかの理由でAnyCpuアプリケーションクラッシュを使用しているとき。おそらくこれは使用されたDLLのためです。 – javapowered
はい、いくつかの 'OleDb'ドライバと' ODBC'ドライバは、例えばx86モードでのみ動作します。 –
@ javapoweredはい、あなたのDLLが特にx86またはx64の場合は、対応するものを使用します。例として、私はx86のOracle DB Access DLLを使用していましたが、x86でコンパイルする必要があります。 –
いいえ...あなたのソフトウェアをコンパイル/ビルドするマシン(EXE、DLL ...)は、対象となるターゲット(x86/x64/Any)とは何の関係もありません。
x86またはAnyCPUを使用する場所でビルドの結果を実行したい場合は、結果をx64のみで実行したい場合は、x64を使用します。
x86またはx64を使用しなければならない場合があります。これは、(サードパーティの)サードパーティのコンポーネント/ライブラリ/ DLL/ActiveXなどを32ビットのみ(x86)または64ビットのみ(その後x64)。
AnyCPU
私が一般的に推奨するものです。 this SO postで詳しく説明されているこの問題を確認できます。
唯一の懸案事項は、逆方向に進むことができないことです。x86アプリケーションからx64アセンブリを使用することはできません。 AnyCPU
はこの潜在的な落とし穴を緩和します。
- 1. Asp.Net AnyCPUまたはX64コンパイルをビルド
- 2. プラットフォーム属性を使用したWiX x86/x64ビルド
- 3. x86またはx64の逆アセンブラは
- 4. X86またはX64のAppID!異なるか同じですか?
- 5. モノデベロッパーでx64をビルドするには?
- 6. 管理対象アセンブリがx86、x64またはAnyCPUであるかどうかをプログラムで確認する方法はありますか
- 7. x64からアプリをビルドするには?
- 8. 任意のCPUまたはx64でのプラットフォームターゲットファイル
- 9. x86/x64アーキテクチャ用のSQLite dll
- 10. x64上でx86を使用するようにASP.NETを構成する
- 11. machine.configをWiX x86/x64で変更する
- 12. x64プログラムはWindows x64上でx86 COMオブジェクトにアクセスできますか?
- 13. x86またはx64として実行されているアプリケーション?
- 14. x86 - x64 porting query
- 15. RXTX x64とx86
- 16. Visual Studio 2010でビルドオプションとしてx64(または任意のCPU)を追加する方法(コンソールアプリケーションからクラスライブラリに)
- 17. JRE x86を使用しているWindows x64のJavaシリアルI/O
- 18. x64上のx86リモートデバッガサービス
- 19. SWT x64 xulrunner 3.6.28 x86
- 20. 共有メモリをx86からx64に、またはその逆をOSXで読む
- 21. WMIでプロセスのCPUとメモリ使用量を知る方法は?
- 22. x86/x64ディスプレースメントアドレッシングを追加
- 23. UbuntuでMarbleをビルドするx64
- 24. Windowsインストーラ(VS2008)でx86とx64の両方をターゲットにする
- 25. x86とx64 System.Data.SQLiteの問題
- 26. Assembly.Invoke()がx86およびAnyCPUと競合します
- 27. .NET AnyCPUプロジェクトは、プラットフォーム固有のライブラリに
- 28. エンティティフレームワークのスピンアップは、x64とx86の両方ではるかに遅い
- 29. フィールドを参照解除するときにメモリバリアが必要(.net x86またはx64)ですか?
- 30. ARMのcl.exeがARM Developer Command Lineからx86またはx64アプリケーションをビルドしようとするのはなぜですか?
DLLが32ビットでのみ使用可能かどうかをどのように判断できますか?また、プログラムが32ビットと仮定してネイティブコールを行っているかどうかをどのように知ることができますか? –
@DanW、質問を投稿することをおすすめします。コメントのような質問をすることは、あなたを非常に遠くにさせることはありません。 –
他の人もこの問題に遭遇すれば、ここでそれを持つほうがずっと便利です。とにかく、私は[これは](http://stackoverflow.com/a/2418287/848344)のトリックを行うと思います。 –