- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在 WIN 7
上使用 VS2015
编写一个 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 函数
用法的项目时,我会遇到编译错误。但我没有。
我试着寻找其他的,new WINAPI in vista
, 并且刚刚添加了对 GetTickCount64 function 的调用.编译时,我得到了这个:
error C3861: 'GetTickCount64': identifier not found
这证实了我的解决方案。
我注意到 RegDeleteKeyEx function ,支持的最低客户端
是Windows Vista、Windows XP Professional x64 Edition
但是,我的应用程序也可以在 XP 32 中运行。
在这种用例中如何强制执行编译错误?
最佳答案
不幸的是,正如我在“winreg.h”中看到的那样,RegDeleteKeyEx
没有条件编译(RegDeleteKey
除外)。所以在这种情况下没有(简单的)方法来触发编译错误。
唯一的选择(对于常规静态 DLL 加载)是在 winreg.h(或 windows.h)上创建您自己的包装器,它将处理版本检查(例如 #undef RegDeleteKeyEx
在相应的情况下)。
有时这类问题也可以使用动态 DLL 加载 (LoadLibrary
/GetProcAdress
) 来解决,您可以在其中检查当前版本的 Windows 上是否存在特定函数,应用程序运行的地方(例如,您可以创建一个 RegDeleteKey
包装器,它会在支持它的 Windows 版本上调用 RegDeleteKeyEx
和 RegDeleteKey
如果在不支持的版本下运行)。然后在运行时检查功能是否存在,因此该程序可以在任何版本的系统上运行,并且仍然可以在支持它们的版本上使用最新的功能(并且在较低的版本上没有 DLL“ Unresolved 导入”加载问题不支持该功能的版本)。
关于c++ - 为以前的 Windows 平台构建我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569130/
我是 firebase 的新手,我正在尝试分页查询。我喜欢有一个“下一个”和“上一个”按钮。我的下一个按钮工作正常,我的问题是单击上一个 引用:https://firebase.google.com/
抱歉,标题这么蹩脚,但我只是不知道该放什么,希望你能理解。另外,我不知道以前是否有人问过类似的问题,因为我不知道合适的关键字 - 因此也无法用谷歌搜索。 基本上...在查看preg_match_all
我想在 TFS 中 check out 一个检入文件的先前版本。我可以轻松获得特定文件的变更集 ID 列表,但无法弄清楚如何 checkout 以前的版本。 我目前的代码: var workspace
我想使用 @FunctionalInterface来 self 代码中的 Java 8,但我希望能够将生成的类文件与 Java 6 一起使用。我认为我应该将源版本设为 1.8 , 目标版本为 1.6
自从 versions 被删除以来,我一直无法找到安装以前版本软件的方法。命令并点击 Homebrew。我在 2008 Mac Pro (3,1) 上运行 macOS 10.14.3 (Mojave)
当我开始当前的项目时,App Store 中已经有一个应用程序。此应用程序仅适用于 iPhone。 我的第一个任务是测试和构建一个也可以在 iPod Touch 上运行的版本。 大约 3 周前,App
我在 GitHub 上有一个曾经是 fork 的 repo,但现在不是了,因为我已经删除了原始项目的任何痕迹并开始了一个同名的新项目。 但是,GitHub 仍然表示该项目是 fork 的。有什么方法可
我是一名优秀的程序员,十分优秀!