0

当我执行 DirectDraw 方法失败时,如何在 DirectX 7 中获取失败错误字符串?

if (FAILED(lpddPrimarySurface->SetPalette(lpddPalette)))
{
    MessageBox(NULL, **"I want to get the failure string here."**, "Error", MB_OK);
    return 0;
}

这里我想弹出失败信息的错误信息。如何获取错误的LPCSTR字符串?

4

2 回答 2

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;
}

该线程表明它将起作用我应该如何在 C++ 中正确使用 FormatMessage()? 但是,这表明它不会有没有办法使用 win API 获取 HRESULT 值的字符串表示形式?你将不得不做比这更多的工作。

进一步阅读:这里这里这里

于 2013-08-30T17:06:01.490 回答
0

DirectDraw 没有提供错误字符串。您必须查看返回的 HRESULT 并根据需要格式化您自己的字符串。例如:

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

于 2013-08-30T15:32:30.603 回答