Comment puis-je récupérer les chaînes d'erreur DirectX 9

Je veux récupérer les chaînes d'erreur DirectX 9, mais je peux trouver sur le web à l'aide de la FormatMessage() et _com_error.ErrorMessage(), les deux qui me manquent.

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() échoue et j'utilise le nouveau avec GetLastError() pour voir pourquoi FormatMessage() échoue:
"Le système ne peut pas trouver de texte du message numéro de 0x%1 dans le fichier de messages pour %2."

_com_error.ErrorMessage() me dit "une erreur Inconnue 0x8876086c"

BTW: y a t-il un moyen d'obtenir des chaînes d'erreur pour tous les HRESULT?
Pas vraiment, les codes d'erreur et les messages sont classés par catégorie. Par exemple, le sous-système réseau a ses propres codes et messages, DX dispose de son propre, etc. Donc, vous devez connaître un type d'opération que vous exécutiez afin d'obtenir un message correspondant à l'erreur que vous obtenez.
Regarder le d3d9.h fichier d'en-tête pour les codes d'erreur. Vous trouverez une correspondance avec D3DERR_INVALIDCALL, la chaîne ne va pas vous dire pourquoi vous avez passé les arguments non valides. Ni votre extrait de code.
Comme vous l'avez mentionné Api réseau, j'ai utilisé GetLastError() avec FormatMessage pour Api winsock et il fonctionne bien MSDN dit d'utiliser WSAGetLastError() à la place. Je ne sais pas si c'est un moyen fiable.
Jetez un oeil ici - alax.info/blog/1383 l'outil couvre quelques milliers de HRESULT codes de différentes Api et décode les valeurs d'une manière très pratique.

OriginalL'auteur LeOpArD | 2012-11-24