Применение атрибута custom для переопределения идентификатора диспетчеризации (DISPID) COM по умолчанию.

Интерфейсы диспетчеризации в неуправляемой модели COM содержат член по умолчанию (DISPID_VALUE, или 0) вызываемый в отсутствие заданного идентификатора DISPID. Платформа .NET Framework не может ссылаться на метод или свойство по умолчанию. Следовательно, разработчик может использовать атрибут custom, чтобы при импорте задать любой интерфейс DISPID в качестве члена по умолчанию. Для этого атрибута custom используется следующий синтаксис.

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

Пример

В следующем примере, написанном на языке IDL, показано использование атрибута DISPID custom, указывающего при импорте, что в качестве члена по умолчанию должен использоваться член method1, с DISPID равным 2.

[
   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

Применение атрибута custom, чтобы пометить неуправляемые свойства Get/Set модели COM

Импорт библиотеки типов в виде сборки