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

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

   
Создав окружение, фабрику классов и методы интерфейса IUnknown (которые были добавлены автоматически),
Вы можете приступать к созданию специальных методов, ради которых и генерировался компонент. Клиент будет
вызывать эти методы, таким образом получая доступ к предоставляемым Вашим объектом услугам. Для добавления
новых методов служит мастер Add Method to Interface Wizard.

  • Создание метода EncodeString().
  • В ClassView щелкните правой кнопкой мыши интерфейс IEncoder.
  • В контекстном меню выберите команду Add Method. Откроется диалоговое окно Add Method to Interface.
  • В поле Return Type выберите HRESULT.
  • В поле Method Name введите EncodeString.
  • В поле Parameters поместите следующий код:
    [in] const BSTR instring, [out, retval] BSTR * outstring
    

    В поле Implementation мастер покажет полный MIDL-листинг сигнатуры метода, созданного на основе
    введенных Вами данных (рисунок 1).


    Рис.1. Диалоговое окно Add Method to Interface

   
Задавая параметры с помощью Add Method to Interface Wizard, Вы должны указать их в формате IDL,
который требует определения направления передачи данных в атрибутах. Задавая направление [in], Вы
указываете, что первый параметр передает данные в метод. Параметр типа [in] передается по значению.

   
Функция EncodeString() принимает [in]-параметр и создает строку, закодированную с помощью
простого алгоритма. Указатель на эту строку будет передаваться клиенту в параметре [out].

   
Обратите внимание на использование BSTR - строкового типа данных Automation. Применение
поддерживаемых Automation типов для параметров методов интерфейса означает, что услуги Вашего
компонента будут доступны в языках типа Microsoft Visual Basic или Microsoft Visual J++.

   
Большинство методов СОМ-интерфейсов возвращают HRESULT - определенное в СОМ 32-разрядное
значение, информирующее о неудаче или успехе вызова. Некоторые языки клиентов (например Visual Basic) не
способны работать с данными типа HRESULT напрямую. Для таких случаев существует атрибут [retval] -
он указывает на параметр, который будет использован для размещения возвращаемого значения. Система обработки
ошибок времени выполнения в Visual Basic способна обработать HRESULT-значение, возвращенное
функцией. Но если уж говорить о Visual Basic, то в этом языке результат функции EncodeString() - это
значение, на которое ссылается параметр [retval]. Таким образом, следующий код Visual Basic,
выведет в информационном окне зашифрованную форму сообщения "Неllo":

  Dim comobj  As Encoder
  Set comobj  = New Encoder
  MsgBox comobj.EncodeString('Hello")

   
Щелкните OK, чтобы добавить метод EncodeString(). Пользуясь введенными Вами данными, мастер
Add Method to Interface Wizard вставит соответствующую строку в IDL-файл Вашего проекта,
а также добавит метод CEncoder в класс компонента.


Рис.1. Class Wiev с добавленным методом EncodeString()

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

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



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

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