Когда мне не удалось выполнить метод 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. Вы должны посмотреть на возвращенный HRESULT и отформатировать свою собственную строку при необходимости. Например:
Для ошибок 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;
}
Эта ветка предполагает, что это будет работать Как правильно использовать FormatMessage () в C ++? Однако этот предполагает, что не будет Есть ли способ получить строковое представление значения HRESULT, используя win API? и вам придется проделать немного больше работы, чем эта.