gpt4 book ai didi

c++ - 为以前的 Windows 平台构建我的应用程序

转载 作者:可可西里 更新时间:2023-11-01 09:32:52 27 4
gpt4 key购买 nike

背景

我正在 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 版本上调用 RegDeleteKeyExRegDeleteKey 如果在不支持的版本下运行)。然后在运行时检查功能是否存在,因此该程序可以在任何版本的系统上运行,并且仍然可以在支持它们的版本上使用最新的功能(并且在较低的版本上没有 DLL“ Unresolved 导入”加载问题不支持该功能的版本)。

关于c++ - 为以前的 Windows 平台构建我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com