为什么 %1 很少在“%1 不是有效的 Win32 应用程序”中被替换。
Why is %1 rarely substituted in "%1 is not a valid Win32 application."
我相信大多数 Windows 开发人员都熟悉此错误消息,通常是在尝试混合使用 32 位和 64 位可执行文件时。特别是Python和Java都可以得到。
很明显 %1
代表失败命令的第一个参数 - 即试图加载的可执行文件 - 但为什么它没有填充实际路径?
是调用者做错了什么,还是由于兼容性原因无法修复的某些 Windows 子系统的基本故障?
错误消息来自 Windows 本身,您可以在 System Error Codes (0-499). You translate an error code returned by the API into a message using FormatMessage
, which has an optional Arguments
array; any %1
in the message will be replaced by the first element in this array. If nothing is passed for the arguments, the %1
will be left unchanged if the FORMAT_MESSAGE_IGNORE_INSERTS
flag was used or the FormatMessage
will fail if it wasn't (thanks to 查看完整列表以获取该信息)。
作为一个可能会被遗漏的示例,请考虑错误代码立即转换为异常的代码。如果异常包含错误代码 但没有其他内容 ,则没有上下文可以知道要传递给 FormatMessage
.
的内容
来电者一切正常。他们正在调用 FormatMessage,传递 FORMAT_MESSAGE_IGNORE_INSERTS
标志 1),就像每个人都应该做的那样。调用者无法控制创建的消息,也无法知道它应该传递额外的参数,它们应该是什么类型或多少。
这是 Windows 错误报告系统中的早期设计错误,您会在每个运行良好的应用程序中看到这些占位符。
1) 参见 The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag。
我相信大多数 Windows 开发人员都熟悉此错误消息,通常是在尝试混合使用 32 位和 64 位可执行文件时。特别是Python和Java都可以得到。
很明显 %1
代表失败命令的第一个参数 - 即试图加载的可执行文件 - 但为什么它没有填充实际路径?
是调用者做错了什么,还是由于兼容性原因无法修复的某些 Windows 子系统的基本故障?
错误消息来自 Windows 本身,您可以在 System Error Codes (0-499). You translate an error code returned by the API into a message using FormatMessage
, which has an optional Arguments
array; any %1
in the message will be replaced by the first element in this array. If nothing is passed for the arguments, the %1
will be left unchanged if the FORMAT_MESSAGE_IGNORE_INSERTS
flag was used or the FormatMessage
will fail if it wasn't (thanks to
作为一个可能会被遗漏的示例,请考虑错误代码立即转换为异常的代码。如果异常包含错误代码 但没有其他内容 ,则没有上下文可以知道要传递给 FormatMessage
.
来电者一切正常。他们正在调用 FormatMessage,传递 FORMAT_MESSAGE_IGNORE_INSERTS
标志 1),就像每个人都应该做的那样。调用者无法控制创建的消息,也无法知道它应该传递额外的参数,它们应该是什么类型或多少。
这是 Windows 错误报告系统中的早期设计错误,您会在每个运行良好的应用程序中看到这些占位符。
1) 参见 The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag。