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.)

Nächste

Erstellen eines Objekts in COM