На этом шаге мы рассмотрим алгоритм добавления свойств в итрефейс компонента.
Свойства - это открытые члены-данные СОМ-объекта. Языки, поддерживающие СОМ-свойства,
могут получать сведения о свойствах объектов и задавать их значения практически так же, как задаются значения
переменных-членов класса 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 Кб).
На следующем шаге мы рассмотрим реализацию методов компонента.