2017-10-17 5 views

Antwort

1

COM unterstützt keine Ausnahmen. Sie sind ein sehr starkes Sprachlaufzeitimplementierungsdetail, eine C# -Ausnahme ist nichts wie eine C++ - Ausnahme. Das macht HRESULT sehr wichtig, es ist der Ersatz. Jede COM-Methode sollte einen Fehlercode zurückgeben, ein negativer Wert zeigt einen Fehler an.

Aber viele Sprachen unterstützen Ausnahmen. Zulassen, dass die Sprachlaufzeit einen Fehler HRESULT in eine Ausnahme umwandelt. Daher wird der Rückgabewert nicht mehr benötigt.

Dies ermöglicht dem Typbibliothekimportierer und der CLR, die Methodensignatur neu zu schreiben. Damit sieht es wie eine "normale" Funktion aus, die einen nützlichen Rückgabewert hat. Das Attribut [retval] zeigt dies an. Ohne eine wird es eine normale Methode, die void zurückgibt.

Auch erklärt die Relevanz des Attributs [PreserveSig], es unterdrückt dieses Umschreiben. Gelegentlich erforderlich, wenn das HRESULT mehr als nur 0 zurückgibt, um den Erfolg anzuzeigen. COM-Iteratoren benötigen es zum Beispiel für die Next() method.