Применение атрибута custom, чтобы пометить неуправляемые свойства Get/Set модели COM
Неуправляемые интерфейсы COM могут быть перечисляемыми объектами, получающими доступ к перечислению с помощью метода Item. В .NET Framework этот метод задается как .Item. Единственный правильный способ доступа к этому методу — пометить элемент как propget с помощью атрибутов файла IDL, но эти действия изменили бы сигнатуру функции в библиотеки типов. Этот атрибут custom можно использовать, чтобы при импорте пометить метод как propget. Для атрибута custom используется следующий синтаксис:
GUID = 2941ff83-88d8-4f73-b6a9-bdf8712d000d // for propget
Кроме того, можно использовать другой атрибут custom, чтобы при импорте пометить метод как propput. Для этого атрибута custom используется следующий синтаксис.
GUID = 29533527-3683-4364-abc0-db1add822fa2 // for propput
Обратите внимание, что атрибут custom может применяться только к методам. Кроме того, применяются дополнительные правила:
Одновременно можно применить только один атрибут. При применении нескольких атрибутов все атрибуты, кроме первого, игнорируются.
Для propget атрибут custom игнорирует все сигнатуры метода без возвращаемого значения.
Для propput атрибут custom игнорирует все сигнатуры методов без входных параметров (параметры могут быть помечены с помощью [in] или [out], но не с помощью [out,retval]). Также этот атрибут игнорирует все сигнатуры с возвращаемым значением.
И для propget, и для propput, если эти атрибуты используются вместе с id(-4) или custom dispid(-4), атрибут custom игнорирует метод GetEnumerator.
При импорте библиотеки типов с помощью Tlbimp.exe после применения атрибута custom к интерфейсам диспетчеризации всегда следует использовать , переключатель /transform:dispret.
Пример
В следующем примере, написанном на языке IDL, показано использование атрибута propget:
[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);
См. также
Ссылки
Tlbimp.exe (программа экспорта библиотек типов)
Основные понятия
Применение настраиваемого атрибута для реализации интерфейса IEnumerable