Frage

Ich habe eine Funktion, die einen anderen DWORD-Wert für jeden Fall gibt es einen Fehler. Also habe ich die folgenden definiert haben:

#define ERR_NO_DB_CONNECTION    0x90000
#define ERR_DB_NOT_OPEN         0x90001
#define ERR_DB_LOCKED           0x90002
#define ERR_DB_CONN_LOST        0x90003

Nun kehre ich diese Werte, wenn ein Fehler auftritt. Ich muss auch den Wert von GetLastError in der gleichen Rückkehr zurück.

Nein, ich kann es nicht später lesen.

Ich habe versucht es verschiedene Möglichkeiten kombinieren, zum Beispiel:

return ERR_DB_NOT_OPEN + GetLastError();

und dann den Fehler extrahiert, indem Sie den Wert von ERR_DB_NOT_OPEN Subtrahieren aber da ich brauche diese Funktionen zu verwenden, wo es kann mehrere Rückgabewerte sein kann es ziemlich komplex, das zu tun.

Gibt es eine Möglichkeit, dies zu erreichen? Ich meine, den Wert + GetLastError kombinieren und extrahieren sie später? Code wird geschätzt.

Danke

Jess.

War es hilfreich?

Lösung

Nach Microsofts Dokumentation , die Systemfehlercodes max out bei 15999 (0x3E7F). Das heißt, Sie haben das gesamte obere Wort mit zu spielen. Sie werden Ihre Fehlercodes passen in 4 hexadezimalen Ziffern verkürzen müssen, dann können Sie einige Windows-Makros verwenden, um sie zu kombinieren und aufgeteilt:

return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);

int lasterror = LOWORD(result);
int code = HIWORD(result);

Andere Tipps

Ich weiß, dass dieser Beitrag ist alt, aber nur für den Fall ... In Ergänzung Mark Antwort. Folgende Code Region ist für Sie Ihre eigenen Fehler zu definieren.

Fehlercodes sind 32-Bit-Werte (Bit 31 ist das höchstwertige Bit). Bit 29 ist für die Anwendung definierten Fehlercodes reserviert; kein System Fehlercode hat dieses Bit gesetzt. Wenn Sie einen Fehlercode definieren für Ihre Anwendung dieses Bit gesetzt, um anzuzeigen, dass der Fehlercode hat durch Ihre Anwendung definiert und um sicherzustellen, dass Ihr Fehlercode nicht Konflikt mit irgendwelchen systemdefinierte Fehlercodes.

https: // msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx

Sie können sie in einen String kombinieren (a char-Array) und sie dann vom Anrufer geteilt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top