5

コードがコンパイルされているWindowsOSを検出するために存在するC++コンパイル時マクロはありますか。私は基本的にWin7でのみ特定の機能をサポートしたいと思っています。だから私はこのようなことをすることに興味があります

#if <os_macro> = WIN7
  // This function would do something valid only on Win7 builds.
  bool myfunction {
        // do something here
  }
#else
  // This function would typically return false, since its not supported on OS below win7
  bool myfunction {
       return false;
  }
#endif 

これを行うための他のより良い方法はありますか?

4

5 に答える 5

11

コンパイルされるOSはそれほど重要ではありません。さらに重要なのは、コードが実行されているOSです。これは、コンパイル時に明らかに検出できません。ただし、古いバージョンのWindowsでコードを実行する場合は、特定の値に設定WINVER_WIN32_WINNTて、新しい関数を使用できないようにすることができます(Windowsヘッダーファイルで、これらのマクロがテストされる場所を検索して、アイデアを得るだけです)。 )。

実行時に機能をテストするには、GetProcAddressLoadLibrary新しいDLLにある場合は)を使用して、機能が使用可能かどうかをテストします。そうである場合はそれを呼び出し、そうでない場合は呼び出さないでください。

コンパイラのバージョンなどを検出する場合は、VisualStudioコンパイラで使用される事前定義されたマクロも参照してください。

于 2012-04-11T18:54:31.650 に答える
1

OSの正確なバージョンを通知するための標準のWindowsヘッダーマクロのセットがあります

于 2012-04-11T18:52:38.067 に答える
0

少なくとも、初心者向けのMS VC ++、WIN32、_WIN32、および_WIN32_WINNTを使用します。コンパイル時に制御する必要がない限り、GetVersionExなどを使用して実行時に検出することを検討してください。同じビルドが古いバージョンで実行されますが、新しい機能が利用可能になったときに利用されます。

于 2012-04-11T18:51:32.117 に答える