Как получить DirectDraw Последняя строка ошибки (DirectX 7)

Когда мне не удалось выполнить метод 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

Решение

Строка ошибки не предоставляется DirectDraw. Вы должны посмотреть на возвращенный HRESULT и отформатировать свою собственную строку при необходимости. Например:

http://www.gamedev.net/topic/8268-ddraw-error-code/

0

Другие решения

Для ошибок 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? и вам придется проделать немного больше работы, чем эта.

Дальнейшее чтение: Вот а также Вот а также Вот

1

По вопросам рекламы [email protected]