2012-11-24 4 views
7

DirectX 9의 오류 문자열을 검색하고 싶지만 웹에서 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()는 실패하고 내가하는 formatMessage()가 실패하는 이유를 GetLastError()를 다시 사용 : 는 "이 시스템은 메시지 번호 % 2에 대한 메시지 파일에 대해 0x % 1에 대한 메시지 텍스트를 찾을 수 없습니다 . " DXGetErrorString()DXGetErrorDescription() -

_com_error.ErrorMessage()가 "알 수없는 오류 0x8876086c"

+0

BTW : 모든 HRESULT에 대한 오류 문자열을 얻을 수있는 일반적인 방법이있다? – LeOpArD

+0

실제로는 오류 코드와 메시지가 분류됩니다. 예를 들어, 네트워크 하위 시스템은 고유 한 코드와 메시지를 가지고 있으며, DX는 자체적으로 코드를 가지고 있습니다. 따라서 여러분은 여러분이 얻고있는 오류에 대응하는 메시지를 얻기 위해 수행하고있는 작업 유형을 알아야합니다. –

+0

오류 코드에 대한 d3d9.h 헤더 파일을보십시오. D3DERR_INVALIDCALL과 일치하는 것을 찾을 수 있습니다. 문자열은 잘못된 인수를 전달한 이유를 알려주지 않습니다. 당신의 스 니펫도 아닙니다. –

답변

15

의 DirectX 오류 메시지가 나에게 말한다, 두 가지 기능이있다. 즉, 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)); 
} 
+0

그것은 작동합니다! 고맙습니다. – LeOpArD

+0

dxerr는 더 이상 사용되지 않습니다. 또한 아래의 링크에 따르면 - "VS 2015 C 런타임은 레거시 DirectX SDK에 포함 된 DXERR.LIB와 호환되지 않습니다"https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres- dxerr-lib / – kreuzerkrieg

관련 문제