2012-02-09 35 views

答えて

7

には、各オプションの概要が含まれています。ここで

が小さいの引用です:

デフォルト設定で、任意の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ビットプロセスから呼び出すと、 ランタイムエラーが発生します。

+0

DLLが32ビットでのみ使用可能かどうかをどのように判断できますか?また、プログラムが32ビットと仮定してネイティブコールを行っているかどうかをどのように知ることができますか? –

+0

@DanW、質問を投稿することをおすすめします。コメントのような質問をすることは、あなたを非常に遠くにさせることはありません。 –

+0

他の人もこの問題に遭遇すれば、ここでそれを持つほうがずっと便利です。とにかく、私は[これは](http://stackoverflow.com/a/2418287/848344)のトリックを行うと思います。 –

4

は一般を言えば、あなたはすべての時間をAnyCpu使用する必要があります。

互換性の問題が予想される特別な理由がある場合は、必要に応じてx86またはx64を選択する必要があります。

コメントに記載されているように、特定のアーキテクチャに対して構築されたDLLでは、アセンブリを特定の方法で構築する必要があります。これは、が必要な場合はとする必要があります。

+0

私は何らかの理由でAnyCpuアプリケーションクラッシュを使用しているとき。おそらくこれは使用されたDLLのためです。 – javapowered

+1

はい、いくつかの 'OleDb'ドライバと' ODBC'ドライバは、例えばx86モードでのみ動作します。 –

+0

@ javapoweredはい、あなたのDLLが特にx86またはx64の場合は、対応するものを使用します。例として、私はx86のOracle DB Access DLLを使用していましたが、x86でコンパイルする必要があります。 –

2

いいえ...あなたのソフトウェアをコンパイル/ビルドするマシン(EXE、DLL ...)は、対象となるターゲット(x86/x64/Any)とは何の関係もありません。

x86またはAnyCPUを使用する場所でビルドの結果を実行したい場合は、結果をx64のみで実行したい場合は、x64を使用します。

x86またはx64を使用しなければならない場合があります。これは、(サードパーティの)サードパーティのコンポーネント/ライブラリ/ DLL/ActiveXなどを32ビットのみ(x86)または64ビットのみ(その後x64)。

1

AnyCPU私が一般的に推奨するものです。 this SO postで詳しく説明されているこの問題を確認できます。

唯一の懸案事項は、逆方向に進むことができないことです。x86アプリケーションからx64アセンブリを使用することはできません。 AnyCPUはこの潜在的な落とし穴を緩和します。

関連する問題