2012-11-24 38 views
7

DirectX 9のエラー文字列を取得したいのですが、WebでFormatMessage()と_com_error.ErrorMessage()を使用しています。どうすればDirectX 9のエラー文字列を取得できますか?

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のメッセージのテキストを見つけることができません" DXGetErrorString()DXGetErrorDescription() -

_com_error.ErrorMessageは()DirectXのエラーメッセージを取得するには、 "不明なエラー0x8876086c"

+0

ところで:すべてのHRESULTのエラー文字列を取得する一般的な方法はありますか? – LeOpArD

+0

エラーコードとメッセージは分類されていません。たとえば、ネットワークサブシステムには独自のコードとメッセージがあり、DXには独自のコードがあります。したがって、取得したエラーに対応するメッセージを取得するために実行していた操作の種類を知る必要があります。 –

+0

エラーコードについては、d3d9.hヘッダーファイルを参照してください。 D3DERR_INVALIDCALLと一致するものが見つかるでしょう。文字列は無効な引数を渡した理由を示しません。あなたのスニペットもありません。 –

答えて

15

を私に語った、二つの機能があります。つまり、​​はあなたが望むものを手に入れません。ここで小さな例です:

// 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)); 
} 
+0

それは動作します!ありがとうございました。 – LeOpArD

+0

dxerrは推奨されていません。さらに、以下のリンクによると - 「VS 2015 Cランタイムは従来のDirectX SDKに含まれているDXERR.LIBと互換性がありません」https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres- dxerr-lib / – kreuzerkrieg

関連する問題