私は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
はこの潜在的な落とし穴を緩和します。
DLLが32ビットでのみ使用可能かどうかをどのように判断できますか?また、プログラムが32ビットと仮定してネイティブコールを行っているかどうかをどのように知ることができますか? –
@DanW、質問を投稿することをおすすめします。コメントのような質問をすることは、あなたを非常に遠くにさせることはありません。 –
他の人もこの問題に遭遇すれば、ここでそれを持つほうがずっと便利です。とにかく、私は[これは](http://stackoverflow.com/a/2418287/848344)のトリックを行うと思います。 –