Создание СОМ-компонентов средствами ATL. Добавление свойств в интерфейс компонента

   
На этом шаге мы рассмотрим алгоритм добавления свойств в итрефейс компонента.

   
Свойства - это открытые члены-данные СОМ-объекта. Языки, поддерживающие СОМ-свойства,
могут получать сведения о свойствах объектов и задавать их значения практически так же, как задаются значения
переменных-членов класса C++. К примеру, следующий код на Visual Basic показывает в
информационном окне текущее значение свойства Key и присваивает ему новое значение 3:

  Dim comobj As Encoder 
  Set comobj = New Encoder 
  MsgBox comobj.Key 
  comobj.Key = 3

   
Поскольку интерфейс COM - это по существу таблица указателей на функции, в C++ СОМ-свойства
реализованы в виде пары функций - одна из них задает значение свойства, а другая служит для его считывания.
Мастер Add Property to Interface Wizard автоматически создает методы Get и Put для каждого
из определенных Вами свойств, хотя Вы вправе отказаться от реализации метода Put, генерируя таким образом
свойство только для чтения.

  • Создание свойства Key.
  • В ClassView щелкните правой кнопкой мыши интерфейс IEncoder.
  • В контекстном меню выберите команду Add Property.
  • В поле Return Type выберите HRESULT, а в Property Type - short.
  • В поле Property Name введите Key. Обратите внимание на MIDL-сигнатуры функций
    get_Key и put_Key(), появившиеся в поле Implementation.
  • Щелкните ОК для создания функций, реализующих свойство.
    Рис.1. Окно Add Property to Interface

   
В классе Вашего СОМ-объекта Вы должны определить переменную-член для хранения данных. А также написать
реализацию методов Get и Put для помещения (извлечения) данных из/в переменную-член.

  • Реализация свойства Key.
  • Добавьте в класс CEncoder защищенную переменную-член m_Кеу типа short.
    Рис.2. Добавление переменнуой-члена m_Кеу типа short
  • Добавьте следующую строку в конструктор CEncoder::CEncoder(), чтобы инициализировать переменную
    m_Кеу и присвоить ей значению по умолчанию:

      m_Key = 1;
    


    Рис.3. Содержание конструктора

  • В ClassView раскройте интерфейс IEncoder и в классе CEncoder найдите функции
    get_Key() и put_Key(). Напишите их код, как показано ниже:

    STDMETHODIMP CEncoder::get_Key(short *pVal)
    {
       *pVal = m_Key; 
       return S_OK; 
    }
    
    STDMETHODIMP CEncoder::put_Key(short newVal)
    {
      newVal = newVal > 5 ? 5 : newVal; 
      newVal = newVal < -5 ? -5 : newVal; 
      m_Key = newVal;
      return S_OK; 
    }
    


    Рис.4. Функции get_Key() и put_Key()

   
Обратите внимание на простой код проверки границ в функции put_Key().

   
Текст этого приложения можно взять здесь (25,5 Кб).

   
На следующем шаге мы рассмотрим реализацию методов компонента.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий