【发布时间】:2017-05-24 23:02:51
【问题描述】:
背景
我正在使用VS2015 在WIN 7 上编写一个C++ 应用程序。此应用将在大于等于XP 的所有 Windows 操作系统上运行。
在我的代码中,我使用了很多 WINAPI 调用。
我希望在编译时防止使用未在 win XP 中定义的 API。
动机
在某些时候,我使用了函数 RegDeleteKeyEx function 却没有注意到这个 API 在 win XP 中不可用
解决方案
所以,我关注了这个帖子:Modifying WINVER and _WIN32_WINNT 并声明了这个:
#include <winsdkver.h>
#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
在文件targetver.h
我希望在此修复之后,当我编译包含RegDeleteKeyEx function 用法的项目时,我会收到编译错误。
但我没有。
质量检查
我尝试寻找其他 new WINAPI in vista,并刚刚添加了对 GetTickCount64 function 的呼叫。编译时,我得到了这个:
error C3861: 'GetTickCount64': identifier not found
这证实了我的解决方案。
问题
我注意到对于RegDeleteKeyEx function,Minimum supported client 是Windows Vista, Windows XP Professional x64 Edition
不过,我的应用也可以在 XP 32 中运行。
如何在这种用例中强制执行编译错误?
【问题讨论】:
-
你运气不好。不幸的是,它在某些 SKU(XP x64、Win2003SP1)上可用。可以追溯到 Longhorn 的麻烦,当时的 SDK 添加是错误的。使用
#undef RegDeleteKeyEx是获得编译错误的唯一半体面的解决方法。
标签: c++ windows winapi windows-xp