カスタム属性を適用したアンマネージ COM の Get/Set プロパティのタグ付け
アンマネージ COM インターフェイスは、Item メソッドで列挙体にアクセスする、列挙可能なオブジェクトにすることもできます。 .NET Framework の場合、このメソッドは .Item として指定されます。 このメソッドに適切にアクセスする唯一の方法は、IDL ファイル内の属性を通じて、項目を propget としてタグ付けすることですが、タイプ ライブラリ内の関数のシグネチャが変更される場合があります。 インポート時に propget としてメソッドをタグ付けするために、この custom 属性を使用できます。 custom 属性の構文は次のとおりです。
GUID = 2941ff83-88d8-4f73-b6a9-bdf8712d000d // for propget
また、別の custom 属性を使用して、インポート時に propput としてタグ付けすることもできます。 この custom 属性の構文は次のとおりです。
GUID = 29533527-3683-4364-abc0-db1add822fa2 // for propput
この custom 属性は、メソッド上でだけ適用できます。 また、次の規則が適用されます。
一度に 1 属性だけに適用できます。複数の属性に適用すると、最初の属性以外はすべて無視されます。
propget の場合、custom 属性では、戻り値なしのすべてのメソッドのシグネチャが無視されます。
propput の場合、custom 属性では、入力パラメーターなしのすべてのメソッドのシグネチャが無視されます (パラメーターは、[in] または [out] を適用できますが、[out,retval] はできません)。また、戻り値のあるすべてのシグネチャも無視されます。
propget と propput の両方で、id(-4) またはカスタム dispid(-4) と共に使用されている場合、custom 属性では GetEnumerator メソッドが無視されます。
Tlbimp.exe を使用してタイプ ライブラリをインポートするときは、custom 属性をディスパッチ専用インターフェイス (dispinterfaces) に適用した後で、必ず /transform:dispret スイッチを使用してください。
例
propget 属性の使用例を、IDL (インターフェイス定義言語) で記述された次の例に示します。
[custom(2941ff83-88d8-4f73-b6a9-bdf8712d000d, ""), id(6)]
HRESULT cget(int i, [out, retval] short *pVal);
propput 属性の使用例を次に示します。
[custom(29533527-3683-4364-abc0-db1add822fa2, ""), id(7)]
HRESULT cset([in] int i);