次の方法で共有


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

アンマネージ COM のディスパッチ インターフェイスには、指定された DISPID が存在しない場合に呼び出される既定のメンバー (DISPID_VALUE または 0) があります。 .NET Framework では、既定のメソッドやプロパティを参照できません。したがって、このカスタム属性を使用すると、インポート時に任意の DISPID を既定のメンバーとして指定できます。 このカスタム属性の構文は次のとおりです。

GUID = CD2BC5C9-F452-4326-B714-F9C539D4DA58
Value = number indicating the default DISPID

次の例はインターフェイス定義言語 (IDL) で記述されており、カスタム DISPID 属性を使用して、インポート時に DISPID が 2 であるメンバー method1 を既定のメンバーとして使用するように指定する例を示します。

[
   object,
   uuid(5EA05866-2E49-421C-BE47-FF62C5B9504E),
   dual,
   helpstring("IMyClass Interface"),
   pointer_default(unique)
]
interface IMyClass : IDispatch
{
   // Use the default dispID.
   [custom(CD2BC5C9-F452-4326-B714-F9C539D4DA58, 0), id(2), helpstring("method method1")] HRESULT method1();
};
[
   uuid(186D98EE-6750-42B9-947D-B82CF4A94600),
   helpstring("MyClass Class")
]
coclass MyClass
{
   [default] interface IMyClass;
};

タイプ ライブラリのインポート後に得られる MSIL は、次のようになります。

.method public hidebysig newslot abstract virtual 
instance void  method1() runtime managed internalcall
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 03 00 00 00 00 00 ) 
} // This is the end of method IMyClass::method1.

参照

参照

TypeLibConverter

ITypeLibConverter

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

概念

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

カスタム属性を適用したアンマネージ COM の Get/Set プロパティのタグ付け

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