10

DirectX 9のエラー文字列を取得したいのですが、WebでFormatMessage()と_com_error.ErrorMessage()を使用していることがわかりましたが、どちらも失敗します。

hr = g_pd3dDevice->GetRenderTargetData(...
... // the debugger tells me hr = 0x8876086c
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL, hr, 0, (LPTSTR)&lpBuf, 0, NULL))
// it returns 0 with lpBuf unallocated

FormatMessage()が失敗し、GetLastError()で再度使用して、FormatMessage()が失敗する理由を確認します。「システムは%2のメッセージファイルでメッセージ番号0x%1のメッセージテキストを見つけることができません。」

_com_error.ErrorMessage()は、「不明なエラー0x8876086c」と表示します

4

2 に答える 2

19

DirectX エラー メッセージを取得するには、 と の 2 つの関数がありDXGetErrorString()ますDXGetErrorDescription()。そうは言っても、FormatMessage()あなたが望むものは得られません。以下に小さな例を示します。

// You'll need this include file and library linked.
#include <DxErr.h>
#pragma comment(lib, "dxerr.lib")

...

if (FAILED(hr)) {
    fprintf(stderr, "Error: %s error description: %s\n",
        DXGetErrorString(hr), DXGetErrorDescription(hr));
}
于 2012-11-24T16:59:07.780 に答える