Das passt schon. Dazu ist die Delphi-spezifische Aufrufkonvention Safecall da. Sie bewirkt, dass das Ergebnis in Wirklichkeit in einem Out-Parameter zurückgegeben wird. Die Fehlerprüfung mit dem eigentlichen Rückgabewert HResult erfolgt automatisch - im Fehlerfalle wird die Routine SafeCallErrorProc aufgerufen, was eine
Exception auslöst, falls ComObj oder SysUtils eingebunden ist.