Combinando il valore di GetLastError e un messaggio di errore personalizzato
-
02-10-2019 - |
Domanda
Ho una funzione che restituisce un valore DWORD diverso per ogni caso v'è un errore. Così ho seguito sono elencati:
#define ERR_NO_DB_CONNECTION 0x90000
#define ERR_DB_NOT_OPEN 0x90001
#define ERR_DB_LOCKED 0x90002
#define ERR_DB_CONN_LOST 0x90003
Ora, torno quei valori in caso di errore. Ho bisogno di tornare anche il valore della GetLastError nello stesso rendimento.
No, non posso leggere in un secondo momento.
Ho provato combinandola modi diversi, ad esempio:
return ERR_DB_NOT_OPEN + GetLastError();
e quindi estrarre l'errore sottraendo il valore di ERR_DB_NOT_OPEN ma dal momento che ho bisogno di utilizzare questo funzioni in cui ci possono essere diversi valori di ritorno si può ottenere molto complessa per farlo.
Esiste un modo per raggiungere questo obiettivo? Voglio dire, unire il valore + GetLastError ed estrarli in seguito? Codice è apprezzato.
Grazie
Jess.
Soluzione
di Microsoft documentazione , il i codici di errore di sistema massimo fuori a 15999 (0x3E7F). Questo significa che hai l'intera parola superiore con cui giocare. Avrete bisogno di accorciare i vostri codici di errore per adattarsi a 4 cifre esadecimali, quindi è possibile utilizzare alcune macro di Windows per combinare e dividerle:
return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);
int lasterror = LOWORD(result);
int code = HIWORD(result);
Altri suggerimenti
So che questo post è vecchio, ma solo nel caso in ... risposta complementare a Mark. A seguito di regione codice è disponibile per voi per definire i propri errori.
I codici di errore sono valori a 32 bit (bit 31 è il bit più significativo). Bit 29 è riservato per i codici di errore definiti dall'applicazione; sistema di no codice di errore ha questo bit impostato. Se si sta definendo un codice di errore per l'applicazione, impostare questo bit per indicare che il codice di errore ha stato definito dall'applicazione e per garantire che il codice di errore Non contrasta con eventuali codici di errore definiti dal sistema.
https: // msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx
È possibile combinarli in una stringa (un array di caratteri) e poi dividerli dal chiamante.