Fehlercodes in COM

Um Erfolg oder Fehler anzugeben, geben COM-Methoden und -Funktionen einen Wert vom Typ HRESULT zurück. Ein HRESULT ist eine ganze 32-Bit-Zahl. Das hochgeordnete Bit des HRESULT signalisiert Erfolg oder Fehler. Null (0) gibt den Erfolg und 1 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 AddRef - und Release-Methoden nicht signierte Long-Werte zurück. Aber jede COM-Methode, die einen Fehlercode zurückgibt, tut dies, indem sie einen HRESULT-Wert zurückgibt.

Um zu überprüfen, ob eine COM-Methode erfolgreich ist, untersuchen Sie das hochgeordnete Bit des zurückgegebenen HRESULT. Die Windows SDK-Header bieten zwei Makros, die dies vereinfachen: das Makro SUCCEEDED und das MAKRO FAILED . Das MAKRO SUCCEEDED 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 bequemer, die umgekehrte Bedingung zu testen. Das MAKRO FAILED bewirkt das Gegenteil von SUCCEEDED. Es 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.
}

Weiter unten in diesem Modul werden wir uns einige praktische Ratschläge zum Strukturieren Ihres Codes zur Behandlung von COM-Fehlern ansehen. (Siehe Fehlerbehandlung in COM.)

Nächste

Erstellen eines Objekts in COM