18986
環境:  
windows 7  
mingw(gcc)

ソース:

```

    #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
    OSVERSIONINFOEX OSver;
    ULONGLONG condition = 0;
    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    OSver.dwMajorVersion = 6;
    OSver.dwMinorVersion = 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オプションを付けても同じエラーが出ます。

どうすればいいと思いますか？
CC BY-SA 3.0
2015-11-18T07:23:43.540
18970
2015-11-18T09:03:01.223
2015-11-18T07:26:22.217
3639
13313
question
c++ c windows
VerifyVersionInfo関数でOSのバージョン情報を調べたいのですがコンパイルエラーが出てできません
1.Windows用のアプリケーションを作るつもりであるなら、  
素直にVisual Studioを使った方が効率的です。

2.コンパイルエラーとリンクの参照、つまり、  
ライブラリファイル自体(*.lib)はあまり関係がありません。

それはともかく、Win32API関数の説明には、その関数が必要とする  
ヘッダーファイルが示されています。

それを「#include」しなければなりません。  
マニュアルによると、少なくとも winbase.h をインクルードする必要があると説明されています。
CC BY-SA 3.0
2015-11-18T07:52:05.400
18975
2015-11-18T07:52:05.400
3793
18970
answer
ウチのstrawberry版perlに付属してたgcc(mingw)ではwindows7 で問題無くコンパイルできました。

MSYS版のgcc では同じエラーがでました。

MSYS版で定数の定義について調べてみたところ  
`_WIN32_WINNT` の値が小さくて0x0400 ([この表でいう](https://msdn.microsoft.com/ja-
jp/library/6sehtctf.aspx)）NT4.0になっていました。  
おそらく、質問者の環境でも小さい値になっているものと思われますので、  
（つまり、この値が小さいと定義があってもスキップされる）

```

    #define _WIN32_WINNT 0x0601 //windows7 相当 
    #include <windows.h>
    
```

のようにすればいいかと（ウチの環境ではこれでコンパイル・実行ＯＫでした）思います。
CC BY-SA 3.0
2015-11-18T08:55:45.027
18986
2015-11-18T09:03:01.223
2015-11-18T09:03:01.223
5044
5044
18970
answer