当我执行 DirectDraw 方法失败时,如何在 DirectX 7 中获取失败错误字符串?
if (FAILED(lpddPrimarySurface->SetPalette(lpddPalette)))
{
MessageBox(NULL, **"I want to get the failure string here."**, "Error", MB_OK);
return 0;
}
这里我想弹出失败信息的错误信息。如何获取错误的LPCSTR字符串?
当我执行 DirectDraw 方法失败时,如何在 DirectX 7 中获取失败错误字符串?
if (FAILED(lpddPrimarySurface->SetPalette(lpddPalette)))
{
MessageBox(NULL, **"I want to get the failure string here."**, "Error", MB_OK);
return 0;
}
这里我想弹出失败信息的错误信息。如何获取错误的LPCSTR字符串?
对于 NTSTATUS 错误,可能发生以下情况。不确定这是否适用于 Direct Draw 和 Direct X HRESULT 错误代码,但它可能会像系统消息表中的那样起作用。我认为您不需要 ntdll 句柄,因为查找是在系统消息表上完成的。我已经指定它以防万一,因为我从未在没有它的情况下进行过测试。
请原谅静态字符数组,这只是为了展示示例,不是一个好的实现:)
static const char *NTStatusToString(DWORD NtStatusCode)
{
LPVOID lpMessageBuffer = 0;
HMODULE hNTDll = GetModuleHandle("ntdll.dll");
static char szBuffer[256];
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_FROM_HMODULE,
hNTDll,
NtStatusCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMessageBuffer,
0,
NULL);
memset(szBuffer, 0, sizeof(szBuffer));
_snprintf(szBuffer, sizeof(szBuffer)-1, "%s", lpMessageBuffer);
LocalFree(lpMessageBuffer);
return szBuffer;
}
该线程表明它将起作用我应该如何在 C++ 中正确使用 FormatMessage()? 但是,这表明它不会有没有办法使用 win API 获取 HRESULT 值的字符串表示形式?你将不得不做比这更多的工作。
DirectDraw 没有提供错误字符串。您必须查看返回的 HRESULT 并根据需要格式化您自己的字符串。例如: