La combinaison de la valeur de GetLastError et un message d'erreur personnalisé
-
02-10-2019 - |
Question
I ai une fonction qui renvoie une autre valeur DWORD pour chaque cas, il y a une erreur. J'ai donc les suivantes définit:
#define ERR_NO_DB_CONNECTION 0x90000
#define ERR_DB_NOT_OPEN 0x90001
#define ERR_DB_LOCKED 0x90002
#define ERR_DB_CONN_LOST 0x90003
Maintenant, je retourne ces valeurs quand une erreur se produit. Je dois aussi retourner la valeur de GetLastError dans le même rendement.
Non, je ne peux pas le lire plus tard.
J'ai essayé de combiner différentes façons, par exemple:
return ERR_DB_NOT_OPEN + GetLastError();
puis extraire l'erreur en soustrayant la valeur de ERR_DB_NOT_OPEN mais puisque j'ai besoin de l'utiliser dans des fonctions où il peut y avoir plusieurs valeurs de retour, il peut être assez complexe pour le faire.
Y at-il moyen d'y parvenir? Je veux dire, combiner la valeur + GetLastError et les extraire plus tard? Code est apprécié.
Merci
Jess.
La solution
Selon documentation de Microsoft , la les codes d'erreur du système d'out max à 15999 (0x3E7F). Cela signifie que vous ont le mot entier supérieur à jouer avec. Vous aurez besoin de réduire vos codes d'erreur pour entrer dans 4 chiffres hexadécimaux, vous pouvez utiliser des macros Windows pour combiner et de les diviser:
return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);
int lasterror = LOWORD(result);
int code = HIWORD(result);
Autres conseils
Je sais que ce poste est vieux, mais juste au cas où ... La réponse de Complétant Mark. Selon la région de code est disponible pour vous de définir vos propres erreurs.
codes d'erreur sont des valeurs 32 bits (bit 31 est le bit le plus significatif). Bit 29 est réservé pour des codes d'erreur définis par l'application; système pas le code d'erreur a ce bit. Si vous définissez un code d'erreur votre application, ce bit pour indiquer que le code d'erreur a été défini par votre application et vous assurer que votre code d'erreur ne sont pas en conflit avec les codes d'erreur définis par le système.
https: // msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx
Vous pouvez les combiner en une chaîne (un tableau de caractères), puis les séparer de l'appelant.