Fehlercodes in COM
Com-Methoden und -Funktionen geben einen Wert vom Typ HRESULT zurück, um einen Erfolg oder Fehler anzugeben. Ein HRESULT ist eine 32-Bit-Ganzzahl. Das hochgeordnete Bit des HRESULT signalisiert Erfolg oder Fehler. Null (0) gibt den Erfolg an, und 1 gibt einen Fehler an.
Dadurch werden die folgenden numerischen Bereiche erzeugt:
- Erfolgscodes: 0x0-0x7FFFFFFF.
- Fehlercodes: 0x80000000-0xFFFFFFFF.
Eine kleine Anzahl von COM-Methoden gibt keinen HRESULT-Wert zurück. Beispielsweise geben die Methoden AddRef und Release lange Werte ohne Vorzeichen zurück. Jede COM-Methode, die einen Fehlercode zurückgibt, gibt jedoch einen HRESULT-Wert zurück.
Um zu überprüfen, ob eine COM-Methode erfolgreich ist, untersuchen Sie das obere Bit des zurückgegebenen HRESULT. Die Windows SDK-Header stellen zwei Makros bereit, die dies vereinfachen: das SUCCEEDED-Makro und das FAILED-Makro. Das SUCCEEDED-Makro gibt TRUE zurück, wenn ein HRESULT ein Erfolgscode ist, und FALSE, wenn es sich um einen Fehlercode handelt. Im folgenden Beispiel wird überprüft, ob CoInitializeEx erfolgreich ist.
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
// The function succeeded.
}
else
{
// Handle the error.
}
Manchmal ist es praktischer, die umgekehrte Bedingung zu testen. Das FAILED-Makro führt das Gegenteil von SUCCEEDED aus. Sie gibt TRUE für einen Fehlercode und FALSE für einen Erfolgscode zurück.
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
COINIT_DISABLE_OLE1DDE);
if (FAILED(hr))
{
// Handle the error.
}
else
{
// The function succeeded.
}
Später in diesem Modul werden einige praktische Hinweise zum Strukturieren Ihres Codes zur Behandlung von COM-Fehlern behandelt. (Weitere Informationen finden Sie unter Fehlerbehandlung in COM.)