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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top