Unterschiede zwischen [in, out] und [out, retval] in COM-IDL-Definitionen

8

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:

%Vor%

Es scheint, dass [out, retval] verwendet wird, wenn es nur einen einzelnen Rückgabewert gibt, zum Beispiel:

%Vor%

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?

    
LeopardSkinPillBoxHat 16.10.2009, 00:19
quelle

2 Antworten

23

[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

%Vor%

wird

%Vor%

Wenn Sie es nicht als [retval] markieren, enthält der Wrapper eine Methode mit der ursprünglichen Signatur:

%Vor%

Nur der letzte Parameter [out] kann als [out, retval] markiert werden. [in, out] -Parameter können nicht als [retval] markiert werden.

    
sharptooth 16.10.2009, 05:02
quelle
0

Ein weiterer Unterschied ist, wie dies in einem PIA in .NET-Code angezeigt wird.

[out, ret] wird in .NET als Rückgabewert angezeigt.

[out] zeigt ein Argument für die Methode in .NET an.

    
JeanP 07.08.2015 18:19
quelle

Tags und Links