等效于VS 2008编译器的isWindowsServer API

时间:2019-01-07 06:19:48

标签: c++ visual-studio visual-c++

在使用VS 2017编译器编译的产品中,我们使用IsWindowsServer API检查代码是否在服务器版本的OS中运行,然后采取一些措施。由于某些原因,我需要将此逻辑导入到我们的产品的较旧版本中,该产品在VS 2008编译器上运行。 IsWindowsServer API不能在此处使用,并给出错误错误C3861:'strtof':找不到标识符。那么我在这里可以使用的等效API是什么?

1 个答案:

答案 0 :(得分:2)

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。