2016-07-05 95 views
1

我敢肯定这个问题有点奇怪,但我使用Code :: Blocks和GCC。 要在我的项目中使用一些特定的功能,我需要确定Windows的用户机器中安装了哪些版本。获取Windows版本与gcc c + +

使用VS2013/15,我们可以使用VersionHelpers.h和IsWindowsXXXOrGreater()。但是GCC C++呢?

+1

'#include Windows.h'并链接到[Kernel32.lib]和'Ntdll.lib',如[documentationm](https: //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上支持的功能,而您仍需要支持较早的版本),则应该将GetModuleHandleLoadLibraryGetProcAddress结合使用dynamically call that function。 (如果您致电LoadLibrary,则在完成后还必须致电FreeLibrary。)