次の方法で共有


カスタム属性を適用したアンマネージ 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] はできません)。また、戻り値のあるすべてのシグネチャも無視されます。

  • propgetpropput の両方で、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);

参照

参照

TypeLibConverter

ITypeLibConverter

Tlbimp.exe (タイプ ライブラリ インポーター)

概念

IEnumerable を実装するためのカスタム属性の適用

既定の COM ディスパッチ識別子 (DISPID) を上書きするためのカスタム属性の適用

タイプ ライブラリのアセンブリとしてのインポート