【发布时间】:2012-11-24 16:41:20
【问题描述】:
我想检索 DirectX 9 的错误字符串,但我可以在网上找到正在使用 FormatMessage() 和 _com_error.ErrorMessage(),这两个都失败了。
hr = g_pd3dDevice->GetRenderTargetData(...
... // the debugger tells me hr = 0x8876086c
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, hr, 0, (LPTSTR)&lpBuf, 0, NULL))
// it returns 0 with lpBuf unallocated
FormatMessage() 失败,我再次使用 GetLastError() 来查看 FormatMessage() 失败的原因: "系统在 %2 的消息文件中找不到消息号 0x%1 的消息文本。"
_com_error.ErrorMessage() 告诉我“未知错误 0x8876086c”
【问题讨论】:
-
顺便说一句:有没有一种通用的方法来获取所有 HRESULT 的错误字符串?
-
并非如此,错误代码和消息是分类的。例如,网络子系统有自己的代码和消息,DX 有自己的等等。因此,您必须知道您正在执行的操作类型,才能获得与您遇到的错误相对应的消息。
-
查看 d3d9.h 头文件中的错误代码。您会发现与 D3DERR_INVALIDCALL 匹配,该字符串不会告诉您为什么您传递了无效参数。你的 sn-p 也没有。
-
正如您提到的网络 API,我将 GetLastError() 与 FormatMessage 一起用于 winsock API,尽管 MSDN 说要改用 WSAGetLastError(),但它仍然有效。不知道是不是靠谱的方法。
-
@LeOpArD:看看这里 - alax.info/blog/1383 该工具涵盖了来自不同 API 的数千个
HRESULT代码,并以方便的方式解码这些值。
标签: c++ winapi com error-handling directx