使用 gcc c++ 获取 Windows 版本
Getting Windows version with gcc c++
我确定这个问题有点奇怪,但我使用的是 Code::Blocks 和 GCC。
要在我的项目中使用某些特定功能,我需要确定用户计算机中安装的 Windows 版本。
通过 VS2013/15 我们可以使用 VersionHelpers.h 和 IsWindowsXXXOrGreater()。但是 GCC C++ 呢?
您仍在使用 VersionHelpers.h
,即使使用 GCC 或 Clang 或其他编译器。这些函数与 Visual C++ 无关。它们是 Windows SDK 的一部分,所有 Windows 应用程序都必须使用它。
如果尚未安装,您可以 download the Windows SDK from Microsoft 并将其安装在您的开发计算机上。安装后,您需要告诉 Code::Blocks 可以找到 SDK 的 header 文件和 LIB 文件的路径。
VersionHelpers.h
将在那些 header 中(但您只需要包括 Windows.h
)。 VersionHelpers.h
文件定义了一系列内联函数,最终调用从 kernel32.lib
和 ntdll.lib
导出的函数。只要链接器可以找到那些 LIB 文件,一切都会按预期工作。
但是请注意,很少需要确定 Windows 的实际版本。相反,您应该检查是否支持您需要的 功能 。如果你想调用一个可能不可用的 API 函数(例如,一个函数只在 Windows 10 上支持,而你仍然需要支持旧版本),那么你应该 dynamically call that function 通过组合 GetModuleHandle
或 LoadLibrary
与 GetProcAddress
。 (如果调用LoadLibrary
,完成后还必须调用FreeLibrary
。)
我确定这个问题有点奇怪,但我使用的是 Code::Blocks 和 GCC。 要在我的项目中使用某些特定功能,我需要确定用户计算机中安装的 Windows 版本。
通过 VS2013/15 我们可以使用 VersionHelpers.h 和 IsWindowsXXXOrGreater()。但是 GCC C++ 呢?
您仍在使用 VersionHelpers.h
,即使使用 GCC 或 Clang 或其他编译器。这些函数与 Visual C++ 无关。它们是 Windows SDK 的一部分,所有 Windows 应用程序都必须使用它。
如果尚未安装,您可以 download the Windows SDK from Microsoft 并将其安装在您的开发计算机上。安装后,您需要告诉 Code::Blocks 可以找到 SDK 的 header 文件和 LIB 文件的路径。
VersionHelpers.h
将在那些 header 中(但您只需要包括 Windows.h
)。 VersionHelpers.h
文件定义了一系列内联函数,最终调用从 kernel32.lib
和 ntdll.lib
导出的函数。只要链接器可以找到那些 LIB 文件,一切都会按预期工作。
但是请注意,很少需要确定 Windows 的实际版本。相反,您应该检查是否支持您需要的 功能 。如果你想调用一个可能不可用的 API 函数(例如,一个函数只在 Windows 10 上支持,而你仍然需要支持旧版本),那么你应该 dynamically call that function 通过组合 GetModuleHandle
或 LoadLibrary
与 GetProcAddress
。 (如果调用LoadLibrary
,完成后还必须调用FreeLibrary
。)