我正在尝试获取与GetLastError
Windows API函数相关的错误消息。
我已按照此处给出的与FormatMessage
函数相关的示例:
How to get the error message from the error code returned by GetLastError()?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680582%28v=vs.85%29.aspx
我的实现是返回一个字符串,但通过测试注意到一些错误消息包括诸如“%1”之类的文本。例如,对于错误代码574:
{Application Error}应用程序位置0x%08lx处发生异常%s(0x%08lx)。
我假设通过在Arguments
函数中设置FormatMessage
参数来解决此问题。但是,我找不到合适的教程/示例来在系统错误消息上设置此参数。我提供的链接将此参数设置为NULL
。
这是因为通过SetLastError
设置上一条错误消息的任何Windows API调用从不使用与使用Arguments
参数的消息对应的代码吗?
否则,如何为系统错误消息创建这样的va_list
?
答案 0 :(得分:2)
对不起,理想情况下应该是评论,除了设计上缺乏对技术评论的支持。所以,我很乐意很快删除它。但是,就目前而言,信息:Microsoft的标题包含以下信息性评论:
//====== ShellMessageBox ================================================
// If lpcTitle is NULL, the title is taken from hWnd
// If lpcText is NULL, this is assumed to be an Out Of Memory message
// If the selector of lpcTitle or lpcText is NULL, the offset should be a
// string resource ID
// The variable arguments must all be 32-bit values (even if fewer bits
// are actually used)
// lpcText (or whatever string resource it causes to be loaded) should
// be a formatting string similar to wsprintf except that only the
// following formats are available:
// %% formats to a single '%'
// %nn%s the nn-th arg is a string which is inserted
// %nn%ld the nn-th arg is a DWORD, and formatted decimal
// %nn%lx the nn-th arg is a DWORD, and formatted hex
// note that lengths are allowed on the %s, %ld, and %lx, just
// like wsprintf
//
如果这适用于FormatMessage
,我不会感到惊讶。
另外,我会查看有关消息编译器和消息资源的文档。
另请参阅FormatMessage
的文档,
“如果您没有类型为
va_list*
的指针,请指定FORMAT_MESSAGE_ARGUMENT_ARRAY
标志并将指针传递给DWORD_PTR
值数组;这些值输入到格式化为插入值的消息。每个插入必须在数组中具有相应的元素。