当我执行DirectDraw方法失败时,如何在DirectX 7中获取失败错误字符串?
if (FAILED(lpddPrimarySurface->SetPalette(lpddPalette)))
{
MessageBox(NULL, **"I want to get the failure string here."**, "Error", MB_OK);
return 0;
}
这里我想弹出失败信息的错误消息。如何获取错误的LPCSTR字符串?
答案 0 :(得分:1)
对于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;
}
这个主题表明它会起作用How should I use FormatMessage() properly in C++?但是这个建议它不会Is there a way to get the string representation of HRESULT value using win API?,你将不得不做更多的工作。
答案 1 :(得分:0)
DirectDraw没有提供错误字符串。您必须查看返回的HRESULT并根据需要格式化您自己的字符串。例如: