问题标签 [formatmessage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
62906 浏览

c++ - 我应该如何在 C++ 中正确使用 FormatMessage()?

没有

  • MFC
  • ATL

我如何使用FormatMessage()来获取错误文本HRESULT

0 投票
2 回答
8120 浏览

event-log - 如何在没有 EventMessageFile 的情况下读取 Windows 事件日志?

我有读取 Windows 事件日志的代码。它使用 OpenEventLog、ReadEventLog 并获取事件源和事件 ID。然后它在下面查找源

键,根据其中列出的内容加载适当的 DLL EventMessageFile,最后用于FormatMessage将事件字符串与消息 DLL 内容合并以获得最终的事件消息文本。这是推荐的方法,虽然有点痛苦,但效果很好。

直到...我去查找源并发现它没有一个EventMessageFile,而是一个ProvideGuid条目。这似乎是一种新方式(它们出现在 Vista 和 Windows 2008 上)。Uggh - 没有任何东西可以传递给 FormatMessage 来查找消息文本并合并到数据字符串中

:(

在注册表中搜索 guid 确实会导致对其他文件的引用(在 HTTP 源的情况下为 http.sys),但我永远无法获得完整的消息文本。我必须使用这些EvtOpenSessionAPI 吗?我希望不会,因为我已经EVENTLOGRECORD*调用了 to ReadEventLog,并且该软件需要在EvtOpenSession不受支持的 Windows 2003 上运行(仅在 Vista 和 Windows 2008 上可用)。注意:Vista 上的某些源具有 ProviderGUID,而另一些具有 EventMessageFile,因此旧方法仍然可行。

因此,我所追求的是一种查看 ProviderGuid 并获取需要传递给 FormatMessage 以显示完整事件日志消息文本的 DLL 的方法。

感谢您的任何意见

0 投票
2 回答
891 浏览

c++ - Windows FormatMessage 的安全/灵活外观

我需要为一个项目使用FormatMessage(),但我不喜欢它可怕的界面。有谁知道一个外观可以整理它,同时仍然允许替换参数?

我刚刚阅读了FastFormat 介绍的第二部分,并且正在考虑为FormatMessage()编写一个扩展(或者询问FastFormat项目团队是否有一个在工作中),但我很想尽快得到一些东西,所以如果那里还有其他像样的东西,我可能会抓住它。

我想要的是能够编写代码,例如:

这将给出结果:

我构建的当前包装器具有接口:

这有两个问题:

  • 它不是类型安全的,因为很容易传递任何类型 - int, std::string, void*-const char*
  • 参数的数量很容易与表示错误的格式字符串所需的数量不匹配

鉴于FastFormat在类型安全方面的能力,我想知道是否有办法遵循其处理FormatMessage()的机制。

0 投票
1 回答
3330 浏览

c - 为什么 FormatMessage() 找不到 WinINet 错误消息?

我正在运行它来测试FormatMessage

但是,当它返回时lpMsgBuf包含 NULL ......我期待像ERROR_INTERNET_DISCONNECTED这样的东西。

有什么看起来不对劲吗?谢谢。

0 投票
2 回答
1746 浏览

windows - 事件 ID 与事件查看器中显示的内容不匹配

系统事件日志中包含以下详细信息的事件:

EVENTLOGRECORD 的 EventID 字段也有一个 1,因此它与我们在事件日志查看器中看到的相匹配。

到目前为止,一切都很好。

问题是,当您查看 advapi32.dll 时,这是该源从中获取消息的地方,您会看到:

事件日志查看器如何神奇地知道将这些额外的位添加到 ID 以找到正确的字符串?并非所有事件字符串都具有该高位,有些还设置了其他高位。

使用 1 调用 FormatMessage 失败。用 x01000001 调用它成功。但这不是事件日志记录包含的内容...... :(

我找不到任何文档来讨论这个问题(除了描述显示错误/严重性/设施/代码位的 ID 格式之外)。

0 投票
1 回答
1220 浏览

visual-c++ - FormatMessage 在尝试读取 EventLog 时出现错误 317

我对此有几乎类似的问题。 FormatMessage 失败,错误代码 317

不同之处在于它被说成是由它引起的答案,"FORMAT_MESSAGE_FROM_SYSTEM"但是当我将其删除时,它再次发生。

我试图从EventLogWindows Server 2003 中读取。但是当我尝试使用FormatMessage函数时,我得到了317错误。

有趣的是,相同的代码适用于 Windows Server 2008。我该如何解决这个问题,或者我可以使用什么来代替FormatMessage

我的代码:

祝你有美好的一天。。

0 投票
2 回答
749 浏览

c++ - 纠正这个错误:GetLastError 0x13d

在此示例中,dwerror 为10045L.但此代码返回 0x13d 值作为错误。如何获取格式消息?请查看。

0 投票
0 回答
813 浏览

c++ - Windows/C++:带有 GetExceptionCode() 的 FormatMessage() 忽略 FORMAT_MESSAGE_IGNORE_INSERTS

我想使用类似于以下的代码来报告被零除、访问冲突等。我的问题是,尽管设置了 flag FORMAT_MESSAGE_IGNORE_INSERTS,但消息在插入位置被截断。

上面的代码"The instruction at 0x"在调试输出中产生,这并不是很有帮助。

难道我做错了什么?

0 投票
1 回答
615 浏览

c++ - 为什么我需要在 FormatMessage 中强制转换 lpBuffer (LPTSTR) 参数?

在 Windows 的FormatMessage()函数中,参数:

正在努力。按照 Hart 的 Windows 系统编程书,我声明一个LPTSTR指针用作lpBuffer(例如LPTSTR errortext;),然后调用该FormatMessage()函数。

传入这个参数的正确方法是:(LPTSTR)&errorText

这工作正常。但我不明白为什么我需要写(LPTSTR)。我知道这是类型转换,我读过它,但这对我来说没有意义,因为我没有更改变量类型或任何东西,我将它声明为 anLPTSTR并且我将它的内存地址传递给函数,函数期望 anLPTSTR并且我将它传递给了LPTSTR,那么为什么我需要将(LPTSTR)其作为lpBuffer参数的一部分呢?

0 投票
1 回答
686 浏览

c++ - 为什么 FormatMessage 只为 ERROR_SYSTEM_PROCESS_TERMINATED 和 ERROR_UNHANDLED_EXCEPTION 系统错误创建部分消息?

我一直在使用 Windows API 中的 FormatMessage 函数从系统错误代码生成消息字符串。我注意到对于某些错误代码,似乎没有创建完整的消息。

以这个示例程序为例:

根据MSDN,我应该看到以下内容:

{致命系统错误}
%hs 系统进程意外终止,状态为 0x%08x (0x%08x 0x%08x)。系统已关闭。

但是,在示例程序中,我将看到:

{Fatal System Error}
%hs 系统进程意外终止,状态为 0x

我注意到这ERROR_UNHANDLED_EXCEPTION也不会创建完整的消息(与 MSDN 上的列表相比)。两条预期消息都包含0x%08占位符,但消息在0x之后结束。

据我所见,其他错误消息似乎与 MSDN 上的列表相匹配(即问题似乎仅限于ERROR_UNHANDLED_EXCEPTIONand ERROR_SYSTEM_PROCESS_TERMINATED)。


归功于 engf-010 - 如果您使用 Visual Studio 中的错误查找工具(工具 - 错误查找),您会得到相同的结果。错误代码为 574 和 591。


有谁知道为什么这些消息被裁剪?

反正有没有得到完整的信息?