MIDLのretval属性の意味は?

[戻る]
おもち 2017/11/10(金) 10:51:31
IDLファイルでCOM仕様のI/Fメソッドの仮引数を書く時は、属性を書きます。
その中で、出力引数の属性としてoutの他に、一緒に使うretvalがあります。この意味( 存
在意義 )をお教え頂けないでしょうか。

[out]は出力( = 戻値 )用仮引数の宣言だから、これだけで十分の筈だろうと思いました。
が、実際は下記のように[out,retval]を使う書式を多く見ます。ので上述は誤解であると思
えました。

// b と c の違いは何?
HRESULT f( [in] int a, [out] int* b, [out,retval] int* c );

※ 下記を読んだのですが、結局違いが読み取れませんでした。
https://msdn.microsoft.com/library/windows/desktop/aa367158
https://stackoverflow.com/questions/22360942/whats-the-difference-among-in-out-in-
out-and-out-retval

どうぞ宜しくお願いします。

仲澤@失業者 2017/11/13(月) 15:40:51
専門外ですが
[out,retval]が付くパラメータは当該の関数が戻り値として戻すことができるようですね
。
つまり、多様な型について戻り値を変数に入れられたり、
関数の戻り値を直接評価する、というコードが記述可能な言語を使用した場合には、
このオプションが付いた変数を戻り値として直接受け取ったり、
固定値と比べたりできるということではないでしょうか。
一方[out][in,out]は変数として入れ物を渡して、
それに入れてもらうという動作だけが可能、
という違いがあるのではないでしょうか。

おもち 2017/11/14(火) 10:34:11
[[解決]]
「 retvalを付けた出力引数が、あたかも関数値であるかのような書式でコードを書けるよ
うにする、他言語( 例 VB )用のCOM仕様では? 」という推測ですね。

なるほど、その推測は当たっている可能性が高く思えます。
他に情報も経験も無いため、ひとまずこれで納得する事に致します。

どうも有難うございました。

古いスレッドには追加発言できません。