因与Windows版本不匹配而中断构建:Pathcch.h函数



此应用程序必须在Windows 7上运行,因此它定义了"#define _WIN32_WINNT _WIN32_WINNT_WIN7"。PathAllocCanonicalizeWindows 8 [desktop apps only],但构建是有效的,因此在稍后的运行时,在Win7上会出现意外:应用程序无法启动,因为缺少"api-ms-win-core-path-l1-1-0.dll"。标题Pathcch.h定义了一些东西:

/* APISET_NAME: api-ms-win-core-path-l1 */
#ifndef _APISET_PATH_VER
#ifdef _APISET_MINCORE_VERSION
#if _APISET_MINCORE_VERSION >= 0x0100
#define _APISET_PATH_VER 0x0100
#endif
#endif
#endif

它能用吗。。。以某种方式或者,如果这是shell,我可以在Windows7中安装一些东西吗?

EDITPathAllocCanonicalizePathcch.h中,忽略_WIN32_WINNT

微软终止了对Windows7的扩展支持。

这种对api-ms-win-core-path-l1-1-0.dll的替换可能有助于:https://github.com/nalexandru/api-ms-win-core-path-HACK

它是用Blender测试的。

版本宏中没有编译器的魔力;所发生的一切都是,而不是

extern void f(void);

在头文件中,Microsoft有

#if _VERSION >= _MIN_VERSION
extern void f(void);
#endif

(或类似的东西)。这将使用预处理器作为过滤器,使函数在不受支持的系统上未声明(这就是为什么编译器会收到关于未声明符号的警告)。

因此,您可以在项目自己的头文件中自己完成这项工作。#error指令(它是标准C和C++的一部分)将抛出一个编译器错误,并显示您选择的消息。由于您已经决定在源代码中使用#define _WIN32_WINNT _WIN32_WINNT_WIN7,因此可以将类似的内容粘贴到项目自己的头文件中,例如stdafx.h:

#if _WIN32_WINNT < _WIN32_WINNT_WIN8
#error Sorry, this program requires Windows 8 or newer.
#endif

(如果将_WIN32_WINNT_WIN8的实际值放在#include <windows.h>之前,则必须替换它。)在包含这些行之后,如果有人将_WIN32_WINNT更改为低于Windows 8的值,则包含该头文件的第一个源文件将导致编译器出错。

希望这能满足你的需求。

最新更新