我确信大多数Windows开发人员都熟悉此错误消息,通常是在尝试混合使用32位和64位可执行文件时。特别是Python和Java都可以得到它。
很明显NivF007
代表失败命令的第一个参数 - 即尝试加载的可执行文件 - 但为什么它没有填入实际路径?
调用者是否出错了,或者某些Windows子系统的基本故障是否因兼容性原因而无法修复?
答案 0 :(得分:5)
错误消息来自Windows本身,您可以在System Error Codes (0-499)查看完整列表。您使用FormatMessage
将API返回的错误代码转换为消息,该消息具有可选的Arguments
数组;消息中的任何%1
都将被此数组中的第一个元素替换。如果参数没有传递任何内容,%1
如果使用了FORMAT_MESSAGE_IGNORE_INSERTS
标记则保持不变,否则FormatMessage
将失败(感谢IInspectable对于那些信息)。
作为如何错过这种情况的示例,请考虑将错误代码立即转换为异常的代码。如果异常包含错误代码但没有其他,则没有用于知道传递给FormatMessage
的内容的上下文。
答案 1 :(得分:5)
来电者正在做正确的事。他们正在调用FormatMessage,传递FORMAT_MESSAGE_IGNORE_INSERTS
标志 1),就像每个人都应该这样。调用者无法控制所创建的消息,并且无法知道它应该传递其他参数,它们应该是什么类型或者有多少类型。
这是Windows错误报告系统中的早期设计错误,您将在每个行为良好的应用程序中看到这些占位符。
<小时/> 1) 见The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag。