Применение атрибута 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.
См. также
Ссылки
Tlbimp.exe (программа экспорта библиотек типов)
Основные понятия
Применение настраиваемого атрибута для реализации интерфейса IEnumerable
Применение атрибута custom, чтобы пометить неуправляемые свойства Get/Set модели COM