IDL

2017-10-17 12 views
2

I'm learning how to write C# from IDLの戻り値は、戻り値が[out、retval]としてパラメータリストに定義されている理由です。 HRESULTは戻り値型である必要がありますが、C#のコードには何の影響もないようです。IDL

答えて

1

COMは例外をサポートしていません。これらは非常に強力な言語ランタイム実装の詳細です.C#例外はC++例外のようなものではありません。それはHRESULTを非常に重要なものにします、それは代用品です。すべてのCOMメソッドはエラーコードを返す必要があり、負の値は失敗を示します。

しかし、多くの言語が例外をサポートしています。言語ランタイムが障害HRESULTを例外にすることを許可します。したがって、戻り値はもはや必要ありません。

これは、タイプライブラリインポータとCLRがメソッドシグネチャを書き換えることを可能にします。有用な戻り値を持つ "通常の"関数のように見えるようにする。 [retval]属性はこれを示します。それがなければ、voidを返す通常のメソッドになります。

[PreserveSig]属性の関連性についても説明し、この再書き込みを抑制します。成功を示すためにHRESULTが0以上の値を返したときに必要な場合があります。 COMイテレーターは、例えばNext() methodのためにそれを必要とします。