サポートするWindowsのバージョンを明確にする

基礎的な事ですが、Visual C++やPlatform SDKに含まれるヘッダはマクロ定義によって内容が変化します。これは開発したプログラムが動作するWindowsを限定するのに利用します。

その目的で指定出来るのは以下の4つです。

  • WINVER (全てのWindowsを対象とした通し番号)
  • _WIN32_WINNT (WinNT4.0, 2000, 2003)
  • _WIN32_WINDOWS (Win95, 98, ME)
  • _WIN32_IE (Internet Explorerに付随したシェル拡張)



指定の方法ですが、windows.h等、全てのヘッダの前で直接指定する方法と、コンパイラスイッチによって強制させる方法があります。ここでは開発するプログラムがWindows2000以降を前提とするようにします。

前者は

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

#include<windows.h>
・・・

で、後者は(VC++やGCCの場合)コンパイルスイッチを

> cl /DWINVER=0x0500 /D_WIN32_WINNT=0x0500 1.c 2.c …

というようにします(安全性で後者、利便性で前者です)。前者はWINVER等を指定した共通ヘッダを作って必ず最初にincludeすべきです。指定する値はPlatform SDKで上記のキーワードを(WINVER等)検索すればすぐに出てきます。

こうすると、Windows2000以降で利用できる関数や定数全てにアクセスできるようになり、利用できない関数にアクセス出来なくなります。反面、Windows98等では動作しない可能性が有ります。なにも指定しない場合、コンパイラによっては勝手に定義されている事がある(VC6, BCC 5.5)ため、必ず指定しましょう。

逆にこれをやってしまうと、Windowsのバージョンによって機能を一部制限したいというような事は出来ません。その場合、最低限の設定[WINVER=0x0400(Win95)]をして等を指定して、残りをLoadLibrary等で呼び出す必要があります。



[MSDN] Using the Windows Headers

Leave a Reply

最初のコメントを頂けますか?

更新通知を受け取る »
avatar
wpDiscuz