На этом шаге мы рассмотрим алгоритм добавления методов в интерфейс компонента.
Создав окружение, фабрику классов и методы интерфейса IUnknown (которые были добавлены автоматически), Вы можете приступать к созданию специальных методов, ради которых и генерировался компонент. Клиент будет вызывать эти методы, таким образом получая доступ к предоставляемым Вашим объектом услугам. Для добавления новых методов служит мастер Add Method to Interface Wizard.
[in] const BSTR instring, [out, retval] BSTR * outstring
Рис.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 Кб).
На следующем шаге мы рассмотрим добавление свойств в интерфейс компонента.