Existe-t-il une fonction dans l'API Win qui peut être utilisée pour extraire la représentation sous forme de chaîne de la valeur HRESULT? Le problème est que toutes les valeurs de retour ne sont pas documentées dans MSDN, par exemple ExecuteInDefaultAppDomain() fonction n'est pas documentée pour retourner "0x80070002 - Le système ne peut pas trouver le fichier spécifié." Cependant, il le fait! Par conséquent, je me demandais s'il y a une fonction à utiliser dans le cas courant.Existe-t-il un moyen d'obtenir la représentation sous forme de chaîne de la valeur HRESULT à l'aide de l'API Win?
Répondre
Vous pouvez utiliser _com_error:
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
Si vous ne souhaitez pas utiliser _com_error
pour une raison quelconque, vous pouvez toujours jeter un oeil à sa source, et voir comment il est fait.
Ne pas oublier d'inclure l'en-tête comdef.h
Un échantillon plus complet pour plus de commodité: CString en ligne GetMessageForHresult (HRESULT hr) { erreur _com_error (h); CString cs; cs.Format (_T ("Erreur 0x% 08x:% s"), hr, error.ErrorMessage()); return cs; } – nietras
fichier d'en-tête requis: #include
L'API Windows pour cela est FormatMessage. Voici un lien qui explique comment le faire: How to obtain error message descriptions using the FormatMessage API.
Pour les messages Win32 (messages avec un HRESULT qui commence par 0x8007, qui est FACILITY_WIN32), vous devez supprimer le mot d'ordre supérieur. Par exemple dans le 0x80070002, vous devez appeler FormatMessage avec 0x0002.
Cependant, cela ne fonctionne pas toujours pour n'importe quel type de message. Et pour certains messages spécifiques (spécifiques à une technologie, un fournisseur, etc.), vous devez charger la DLL de ressources correspondante, ce qui n'est pas toujours une tâche facile, car vous devez trouver cette DLL.
Le 7 dans 0x8007 est FACILITY_WIN32 et n'est pas FACILITY_ITF. Voir par exemple "Structure des codes d'erreur COM" à http://msdn.microsoft.com/en-us/library/ms690088 –
@uvts_cvs - bien sûr. mon erreur. J'ai mis à jour la réponse. –
'HRESULT_CODE (hr)' peut transformer cela en code d'erreur win32 – Andy
Voici un échantillon à l'aide FormatMessage()
LPTSTR SRUTIL_WinErrorMsg(int nErrorCode, LPTSTR pStr, WORD wLength)
{
try
{
LPTSTR szBuffer = pStr;
int nBufferSize = wLength;
//
// prime buffer with error code
//
wsprintf(szBuffer, _T("Error code %u"), nErrorCode);
//
// if we have a message, replace default with msg.
//
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
NULL, nErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) szBuffer,
nBufferSize,
NULL);
}
catch(...)
{
}
return pStr;
} // End of SRUTIL_WinErrorMsg()
Quel est le point de la clause catch dans la fonction? –
Je ne savais pas 'FormatMessage' throws ... – Andy
- 1. Supprimer ".." de la représentation sous forme de chaîne de l'URL
- 2. Représentation sous forme de chaîne de time_t?
- 3. Représentation sous forme de chaîne de la structure llvm :: Type
- 4. Obtenir la représentation sous forme de chaîne du nœud XML
- 5. Comment sélectionner une valeur enum à partir de la représentation sous forme de chaîne du 'nom'?
- 6. C# Scinder la représentation sous forme de chaîne d'une formule
- 7. Typecast à un type de seulement la représentation sous forme de chaîne du nom de type
- 8. Python: obtenir une représentation sous forme de chaîne de PyObject?
- 9. Représentation sous forme de chaîne du nom de fichier
- 10. Comment obtenir une représentation sous forme de chaîne de XmlType?
- 11. Transformation de la représentation sous forme de chaîne d'un dictionnaire dans un vrai dictionnaire
- 12. Représentation sous forme de chaîne de littéraux typés
- 13. représentation sous forme de chaîne d'une énumération (estring)?
- 14. Obtention de la représentation sous forme de chaîne à partir de CDbCriteria
- 15. Représentation sous forme de chaîne de tableaux en python
- 16. Affichage de la représentation sous forme de chaîne de l'objet date dans la fenêtre Expression de la montre
- 17. Convertir l'heure militaire en représentation sous forme de chaîne
- 18. Représentation d'entiers sous la forme d'un octet
- 19. C#, convertir le temps de la représentation numérique à virgule flottante en représentation sous forme de chaîne
- 20. Est-il possible d'obtenir la représentation sous forme de chaîne de l'adresse d'objet C#?
- 21. Une représentation sous forme de chaîne des propriétés et méthodes
- 22. Récupère la représentation sous forme de chaîne de l'intégralité du code HTML d'un objet jquery DOM
- 23. Représentation de la valeur Salt en tant que chaîne
- 24. Comment puis-je obtenir un type générique à partir d'une représentation sous forme de chaîne?
- 25. Obtention de la représentation sous forme de chaîne d'un type lors de l'exécution dans Scala
- 26. Comment créer un objet Java à partir d'une représentation sous forme de chaîne à l'exécution
- 27. Représentation sous forme de chaîne lisible par l'homme de la table dans Lua
- 28. Représentation sous forme de chaîne de la liste <String> liste
- 29. Comment obtenir la représentation sous forme de chaîne d'une variable en python?
- 30. Format indépendant pour une représentation sous forme de chaîne de la valeur date/heure, pour le serveur MS SQL?
Titre est différent, mais essentiellement la réponse sera la même que pour (http://stackoverflow.com/questions/455434/how-should [ce] -i-use-formatmessage-correctement-en-c) un. –