2016-07-05 3 views
1

私はこの質問がやや奇妙だと確信していますが、Code :: BlocksとGCCを使用しています。 私のプロジェクトでいくつかの特定の機能を使用するには、Windowsのバージョンがユーザマシンにインストールされているかどうかを判断する必要があります。gccを使ってWindows版を入手する

VS2013/15では、VersionHelpers.hとIsWindowsXXXOrGreater()を使用できます。しかし、GCC C++についてはどうでしょうか?

+1

[documentationm](https://www.cisco.com/jp)で説明されているように '#include Windows.h'と' Kernel32.lib'と 'Ntdll.lib' //msdn.microsoft.com/en-us/library/windows/desktop/dn424961(v=vs.85).aspx) – mvidelgauz

答えて

2

GCCやClangなどのコンパイラを使用していても、まだVersionHelpers.hを使用しています。これらの関数は、Visual C++とは関係ありません。これらは、すべてのWindowsアプリケーションで使用する必要があるWindows SDKの一部です。

download the Windows SDK from Microsoftこれは、まだインストールされていない場合は、開発マシンにインストールすることができます。インストールが完了したら、Code :: BlocksにSDKのヘッダファイルとLIBファイルを見つけることができるパスを指定する必要があります。

VersionHelpers.hがこれらのヘッダーに含まれます(ただし、含める必要があるのはWindows.h)。 VersionHelpers.hファイルは、一連のインライン関数を定義し、最終的にはkernel32.libntdll.libからエクスポートされた関数を呼び出します。リンカがそれらのLIBファイルを見つけることができる限り、すべてが期待どおりに動作します。

ただし、Windowsの実際のバージョンを確認する必要はほとんどありません。代わりに、フィーチャーがサポートされているかどうかを確認する必要があります。使用できないAPI関数(たとえば、Windows 10のみでサポートされている関数など)を呼び出す場合は、GetModuleHandleまたはLoadLibraryGetProcAddressのいずれかを組み合わせてdynamically call that functionを指定する必要があります。 に電話をした場合は、終了時にFreeLibraryにも電話する必要があります。

関連する問題