Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> C/C++ -> Сущность технологии COM


Атрибуты и свойства

Иногда бывает полезно показать, что объект имеет некие открытые свойства, которые могут быть доступны и/или которые можно модифицировать через СОМ-интерфейс. СОМ IDL позволяет аннотировать методы интерфейса с тем, чтобы данный метод либо модифицировал, либо читал именованный атрибут объекта. Рассмотрим такое определение интерфейса:

[ object, uuid(0BB3DAE1-11F4-11d1-8C84-0080C73925BA) ] 
interface ICollie : IDog { 
      // Age is a read-only property 
      // Age (возраст) - это свойство только для чтения 
    [propget] HRESULT Age([out, retval] long *pVal); 
      // HairCount is a read/write property 
      // HairCount (счетчик волос) - свойство для чтения/записи 
    [propget] HRESULT HairCount([out, retval] long *pVal); 
    [propput] HRESULT HairCount([in] long val); 
      // CurrentThought is a write-only property 
      // CurrentThought (текущая мысль) - свойство только для записи 
    [propput] HRESULT CurrentThought([in] BSTR val); 
} 

Использование атрибутов [propget] и [propput] информирует компилятор IDL, что методы, которые ему соответствуют, должны быть отображены в преобразователи свойств (property mutators) или в аксессоры на языках, явно поддерживающих свойства. Применительно к Visual Basic это означает, что элементами Age, HairCount и CurrentThought можно манипулировать, используя тот же синтаксис, как при обращении к элементам структуры:

Sub UseCollie(fido as ICollie) 
  fido.HairCount = fido.HairCount - (fido.Age * 1000) 
  fido.CurrentThought = "I wish I had a bone"
End Sub 

С++-отображение этого интерфейса просто прибавляет к именам методов конструкции put_ или get_, чтобы подсказать программисту, что обращение относится к свойству:

void UseCollie(ICollie *pFido) 
{
    long n1, n2; 
    HRESULT hr = pFido->get_HairCount(&n1);
    assert(SUCCEEDED(hr)); 
    hr = pFido->get_Age(&n2);
    assert(SUCCEEDED(hr)); 
    hr = pFido->put_HairCount(n1 - (n2 * 1000)): 
    assert(SUCCEEDED(hr)); 
    BSTR bstr = SysAllocString(OLESTR("I wish I had a bone")); 
    hr = pFido->put_CurrentThought(bstr); 
    assert(SUCCEEDED(hr)); 
    SysFreeString(bstr); 
}

Хотя свойства напрямую не обеспечивают развития, они полезны для выполнения точных преобразований на те языки, которые их поддерживают1.


1 Пакет Direct-to-COM фирмы Microsoft позволяет клиентам использовать свойства как открытые элементы данных интерфейса с помощью некоего очень хитрого механизма.

Исключения
Где мы находимся?

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100