在 Visual Studio 中使用 XP 工具集编译时出现路径空间的 Windows XP 运行时问题

Posted

技术标签:

【中文标题】在 Visual Studio 中使用 XP 工具集编译时出现路径空间的 Windows XP 运行时问题【英文标题】:Windows XP runtime issues with path spaces when compiled with XP toolset in Visual Studio 【发布时间】:2018-12-11 19:41:11 【问题描述】:

我正在使用带有 v141_xp 工具集的 Visual Studio 15 2017 来编译适用于 Windows XP 的 Win32 应用程序。该应用程序将在 Windows 10 和 XP 上运行良好,但运行一些 Windows API 命令,如 _chdir_mkdir(或 CreateDirectory)似乎无法正常工作:未创建目录,或者在这种情况下_chdir 的应用程序不会更改其工作目录。

我认为问题在于名称中带有空格的路径,但我不完全确定是这种情况。我在需要的地方正确使用了\\"\"" 在字符串中,但是在操作这样的路径时,它似乎可以在 XP 中工作,但不是 10,或者它可以在 10 中工作,但不是 XP。

我希望代码在两者上都能正常工作。还有其他我遗漏的兼容性问题吗?

谢谢。

更多信息

由于可移植性要求,我正在使用 /MTd 'Mult-threaded Debug' 进行编译。看起来这可能是编译 CRT 的问题。

【问题讨论】:

怎么不行?我们可以得到minimal reproducible example 吗? 您特别想在哪里创建这些目录?它可能与“标准用户”与“管理员”权限有关。 我总是在标准用户文件夹中创建。我认为这与重构 CRT 代码时引入的一些问题有关。我刚刚根据此处显示的统计数据修复了一个:***.com/q/32452777/2079522 【参考方案1】:

事实证明,该错误与stat 有关,并在此处进行了更多描述:

Visual C++ 2015 express: _stat not working on Windows XP

我的应用程序正在对文件或目录使用此存在性测试,这多年来一直是一种方便的跨平台解决方案:

return (stat(path.c_str(), &st) == 0);

但如果您使用较新的工具集为 Windows XP 进行编译,stat 现在已损坏,您必须使用 Windows API,例如:

return (GetFileAttributes(path.c_str()) != INVALID_FILE_ATTRIBUTES);

【讨论】:

以上是关于在 Visual Studio 中使用 XP 工具集编译时出现路径空间的 Windows XP 运行时问题的主要内容,如果未能解决你的问题,请参考以下文章

面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志

visual studio 2012 编写的程序xp能 运行吗?

Visual Studio 2019:如何使用 Platform Toolset v140_xp?

如何在 Visual Studio 2017 中为 Windows XP 编译代码

从 Visual Studio 2015 企业更新 1 面向 Windows XP

Visual Studio 2012 为 XP 编译 - 无效 win32 - v110_xp