【问题标题】:What is the equivalent of isWindowsServer API for VS 2008 compilerVS 2008 编译器的 isWindowsServer API 相当于什么
【发布时间】:2019-01-07 06:19:48
【问题描述】:
在我们使用 VS 2017 编译器编译的产品中,我们使用 IsWindowsServer API 检查代码是否在服务器版本的操作系统中运行,然后采取一些措施。出于某种原因,我需要将此逻辑导入到在 VS 2008 编译器上运行的旧版本产品中。 IsWindowsServer API 不能在此处使用,并给出错误 error C3861: 'strtof': identifier not found。那么我可以在这里使用的等效 API 是什么?
【问题讨论】:
标签:
c++
visual-studio
visual-c++
【解决方案1】:
IsWindowsServer 本身并不是一个 API。它实际上是一个在 <versionhelpers.h> 中定义的宏,它包装了 VerifyVersionInfo。这是实现:
#include <windows.h>
bool IsWindowsServer()
{
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION };
DWORDLONG const dwlConditionMask = VerSetConditionMask( 0, VER_PRODUCT_TYPE, VER_EQUAL );
return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask);
}
在与 VS2008 捆绑的 SDK 中应该有两个依赖的 API VerSetConditionMask 和 VerifyVersionInfo。