質問: 1; VER_SET_CONDITION( condition, VER_MAJORVERSION, VER_EQUAL); VER_SET_CONDITION( condition, VER_MINORVERSION, VER_EQUAL); if( VerifyVersionInfo( &OSver, VER_MAJORVERSION | VER_MINORVERSION, condition) ) { printf("ok"); } return 0; } ``` エラーメッセージ: ``` ver2.cpp: In function 'int main()': ver2.cpp:12:31: error: 'VER_MAJORVERSION' was not declared in this scope VER_SET_CONDITION( condition, VER_MAJORVERSION, VER_EQUAL); ^ ver2.cpp:12:49: error: 'VER_EQUAL' was not declared in this scope VER_SET_CONDITION( condition, VER_MAJORVERSION, VER_EQUAL); ^ ver2.cpp:12:58: error: 'VER_SET_CONDITION' was not declared in this scope VER_SET_CONDITION( condition, VER_MAJORVERSION, VER_EQUAL); ^ ver2.cpp:13:31: error: 'VER_MINORVERSION' was not declared in this scope VER_SET_CONDITION( condition, VER_MINORVERSION, VER_EQUAL); ^ ``` マイクロソフトのverifyversioninfo関数のページを見ると、英語版の方にkernel32.libが必要と書いてあったので、kernel32.libをダウンロードして-lkernel32オプションを付けても同じエラーが出ます。 どうすればいいと思いますか?
回答: ウチのstrawberry版perlに付属してたgcc(mingw)ではwindows7 で問題無くコンパイルできました。 MSYS版のgcc では同じエラーがでました。 MSYS版で定数の定義について調べてみたところ `_WIN32_WINNT` の値が小さくて0x0400 (この表でいう)NT4.0になっていました。 おそらく、質問者の環境でも小さい値になっているものと思われますので、 (つまり、この値が小さいと定義があってもスキップされる) ``` #define _WIN32_WINNT 0x0601 //windows7 相当 #include ``` のようにすればいいかと(ウチの環境ではこれでコンパイル・実行OKでした)思います。