In einigen der IDL, mit denen ich arbeite, habe ich festgestellt, dass es zwei Konventionen gibt, um Rückgabewerte in Methoden zu setzen - [in, out]
und [out, retval]
.
Es scheint, dass [in, out]
verwendet wird, wenn mehrere Rückgabewerte vorhanden sind, zum Beispiel:
Es scheint, dass [out, retval]
verwendet wird, wenn es nur einen einzelnen Rückgabewert gibt, zum Beispiel:
Ist dies eine COM IDL-Konvention oder nur eine Konvention in dem Code, mit dem ich arbeite?
Gibt es einen funktionalen Unterschied im Code, der aus den 2 Notationen generiert wird, oder sind sie vollständig austauschbar?
[in, out]
bedeutet, dass ein gültiger Wert übergeben wird, wenn die Methode aufgerufen wird und ein gültiger Wert vorhanden ist (auf den der Zeiger zeigt), wenn die Methode den Erfolg zurückgibt. [out]
bedeutet, dass der Wert, auf den verwiesen wird, beliebig sein kann, wenn die Methode aufgerufen wird. Er ist jedoch gültig, wenn die Methode erfolgreich ist. Die Parameter [out]
und [in, out]
müssen Zeiger sein - ihre Werte sind unverändert und gültig und die Gültigkeitsbedingungen gelten nur für die Variablen, auf die sie verweisen.
[out, retval]
ist ein syntaktischer Zucker, der angibt, dass beim Erstellen eines nativen COM-Support-Wrappers dieser Parameter in einen Rückgabewert konvertiert werden sollte. Zum Beispiel
wird
%Vor% Wenn Sie es nicht als [retval]
markieren, enthält der Wrapper eine Methode mit der ursprünglichen Signatur:
Nur der letzte Parameter [out]
kann als [out, retval]
markiert werden. [in, out]
-Parameter können nicht als [retval]
markiert werden.