首页 > 解决方案 > VS 2008 编译器的 isWindowsServer API 相当于什么

问题描述

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

标签: c++visual-studiovisual-c++

解决方案


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。


推荐阅读