OrangeMaker_logo
memo アイコン SDK-MFC 備忘録

Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)

sdk7.0以降の注意点

2010/9/26 作成

sdk7.0以降は、Windows7の開発環境を包含しています。

Windows7を対象とする場合、マクロ定義が

#define _WIN32_WINNT 0x0601
#define WINVER 0x0601


となりますが、これを素直にやるとカーネル呼び出しが変わってしまいます。(Win7専用のカーネルが呼び出されます)

Window7でしか実行しないプログラムなら問題ないですが、旧OSとの互換性が必要な場合は、もう一つマクロの設定が必要になります。

Psapi.hで以下のようになっており、明示的にPSAPI_VERSIONを1に設定してやる必要があります。(明示的な設定がないとWiNVERより2に設定されます。)


#ifndef PSAPI_VERSION
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define PSAPI_VERSION 2
#else
#define PSAPI_VERSION 1
#endif
#endif

#if (PSAPI_VERSION > 1)
#define EnumProcesses               K32EnumProcesses
#define EnumProcessModules          K32EnumProcessModules
#define EnumProcessModulesEx        K32EnumProcessModulesEx
#define GetModuleBaseNameA          K32GetModuleBaseNameA
#define GetModuleBaseNameW          K32GetModuleBaseNameW
(以降略)
		

Win7でずっと開発をしているとうっかりする点です。

逆に実行環境がWin7限定の場合は、積極的に0601に設定したほうが性能的にメリットがあるのでしょうね。