Как получить 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?

2 ответа

Решение

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

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

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

Дальнейшее чтение: здесь и здесь и здесь

Другие вопросы по тегам