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 ハンドルも必要ないと思います。それなしでテストしたことがないので、念のため指定しました。

静的な char 配列を許してください。これは例を示すためのものであり、適切な実装ではありません :)

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 に答える