在 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 编译代码