例えば、#define _WIN32_WINNT 0x0600 とします。
これは、Windows Vista 以降で実装された機能を使うことの宣言であって、できたプログラムは Vista 以降でしか動かなくなります。
この宣言をしたにもかかわらず、Vista 以降固有の機能を使っていない場合、動くこともありますが、動かないものと思っておくべきです。
で、WinMain あたりで VerifyVersionInfo で Vista 以降かどうか判定して蹴るという方法もあるのですが、もっと楽な手もあります。
それは、リンカオプションの /SUBSYSTEM を利用するというものです。
例えばこれを /SUBSYSTEM:WINDOWS,6.0 とすると、Windows 5.x では、実行しようとしたときに「有効な Win32 イメージではありません」と怒られます。
んで、ちょっと前に挑戦して、うまく行かなかったこと。
WINVER や _WIN32_WINNT シンボルの値に応じて、リンカオプションを自動的に指定できないものかと思うわけです。
コードからリンカオプションを指定するには、#pragma comment( linker, "/SUBSYSTEM:WINDOWS,6.0" ) とやればいいはずです。
この "6.0" の部分を、プリプロセッサシンボルから自動生成できないかなーというわけなのですが。
どなたかご存知ありません?