VisualStudio2010を使用してWindows7で既存のC++32コードを64コードに移行しようとしています。これまで64ビットコンパイルを行ったことはありません。インターネット参照の助けを借りて、私は64ビットコンパイルのセットアップを行いました。64ビットコンパイラなどを備えたVS2010やその他の構成変更など。プリプロセッサで、WIN32を削除し、WIN64を追加しました。OS_WIN_32のような他のプリプロセッサや、コードに固有のプリプロセッサがいくつかあります。WIN32が使用されているコードでは、||として追加の条件を追加しました。WIN64これは、アプリケーションがwin64だけでなくwin32でもコンパイルされるようにするためだけのものです。コードをコンパイルしようとすると、コンパイルエラーが発生します。
致命的なエラーC1189:#error:WIN32およびWIN64シンボルの1つのみを定義する必要があります
このエラーは、WIN32とWIN64の両方が定義されているかどうかを確認するローカルコードが原因で発生します。そのコードは以下のとおりです。
#if defined WIN32 && defined WIN64
# error Only one of the WIN32 and WIN64 symbols should be defined
#endif
VS2010では、マクロが有効になっていない場合、マクロ内のコードはグレー表示されます。私のコードでも、上記のエラーはグレー表示されています。しかし、それでも私はそのエラーを受け取っています。
WIN64を追加したコードにはwindows.hが含まれています。参考までに、以下にそれを示します。
#if defined WIN32 || defined WIN64
#include <windows.h>
#include <process.h>
#endif
だから私の質問は、なぜ私はこのエラーが発生するのですか?64ビットコンパイル用にwindows.hを追加するべきではありません。このインクルージョンにコメントしてみましたが、コードで使用されているHANDLEで他のエラーが発生しています。WIN32定義に移動すると、VS2010はwindef.hファイルの定義を指しています。このファイルは、Microsoft SDKs \ windows \ v7.0A \ includeフォルダーにあります。つまり、ローカルコードではありません。参考までに、その定義を以下に示します。
#ifndef WIN32
#define WIN32
#endif
だから私はコンパイラがプリプロセッサWIN32とWIN64の両方を取得している理由を知りたいです。
よろしくお願いします。