2012-11-24 20 views
7

için hata dizelerini nasıl alabilirim? DirectX 9 için hata dizeleri almak istiyorum, ancak web üzerinde bulamadığım FormatMessage() ve _com_error.ErrorMessage() işlevlerini kullanıyorum.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() başarısız ve ben FormatMessage() başarısız nedenini görmek için GetLastError() ile yeniden kullanmak: "sistem mesajı numarası% 2 için ileti dosyası içinde 0x% 1 için ileti metnini bulamıyor ." DXGetErrorString() ve DXGetErrorDescription() -

_com_error.ErrorMessage() "Bilinmeyen hata 0x8876086c"

+0

BTW: Tüm HRESULT hata dizeleri almak için ortak bir yol var? – LeOpArD

+0

Gerçekten değil, hata kodları ve mesajlar kategorize edilir. Örneğin, ağ alt sistemi kendi kodlarına ve mesajlarına sahiptir, DX'in kendine ait vb. Bu nedenle, aldığınız hatayı gösteren bir mesaj almak için gerçekleştirdiğiniz bir işlem türünü bilmeniz gerekir. –

+0

Hata kodları için d3d9.h başlık dosyasına bakın. D3DERR_INVALIDCALL ile bir eşleşme bulacaksınız, dize neden geçersiz argümanları geçtiğini söylemeyecek. Snippet'iniz de yok. –

cevap

15

DirectX hata mesajı almak için bana söyler, iki işlevi vardır. Olduğu söyleniyor, FormatMessage() ne istediğinizi alamayacaksınız. İşte küçük bir örnektir:

// 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

Çalışıyor! Teşekkür ederim. – LeOpArD

+0

dxerr kullanımdan kaldırılmıştır. Ayrıca aşağıdaki bağlantıya göre - "VS 2015 C Çalışması, eski DirectX SDK'da bulunan DXERR.LIB ile uyumlu değil" https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres- dxerr-lib / – kreuzerkrieg