Опрос

Что вас больше интересует?

  • игры для nokia
  • темы на телефон
  • программы на мобильный
  • обзоры мобильных телефонов


 

Какие игры вы предпочитаете?

  • игры для мальчиков
  • игры для девочек
  • драки
  • стрелялки
  • логические игры
  • спортивные


 

счетчики

Спонсор раздела:

Библиотека типов

Статьи

Одной из проблем, возникающих перед программистом во время изучения нового компонента, становится поиск поясняющей документации. Переливающийся всеми цветами радуги программный продукт может оказаться бесполезным, если мы не понимаем, как с ним обращаться. Так, при разработке любого COM-проекта необходимо учесть, что клиентское приложение должно владеть полной информацией об интерфейсной части COM-сервера, иначе оно не сможет воспользоваться его услугами. В частности клиент COM должен знать:

• перечень COM-объектов, инкапсулированных в сервере;

• список интерфейсов, поддерживаемых каждым из объектов;

• состав функций в каждом из интерфейсов;

• перечень аргументов функций.

Наилучшим хранилищем знаний такого рода считается библиотека типов. Библиотека типов не является обязательной частью компонента COM, но она может значительно упростить работу пользователя COM-объекта, особенно если речь идет о компоненте, созданном сторонним производителем на другом языке программирования. Кроме того, помимо справочной информации на основании данных из библиотеки могут генерироваться необходимые заголовочные файлы.

Среда программирования Delphi вооружена утилитой - редактором библиотеки типов. Для вызова редактора в главном меню Delphi воспользуйтесь пунктом View - Type Library. Если вернуться к нашему примеру, то после обращения к редактору в дереве объектов библиотеки типов мы увидим два объекта: интерфейс IMyComObject и описание будущего COM-объекта - класс MyComObject.

Посмотрим, какую помощь может оказать библиотека типов при создании нового метода. Допустим, мы хотим описать метод, получающий два значения и возвращающий результат их сложения:

function Sum(Value1, Value2:

out Res: OleVariant): HResult;

Integer;

Выделите узел интерфейса IMyComObject и нажмите кнопку New Method. Под узлом IMyComObject появится дочерний элемент - прототип будущей функции. Переименуйте этот элемент в «Sum» - название новой функции. Для нового метода системой сразу назначается новый идентификатор ID = 101 (страница атрибутов метода Attributes). Для определения параметров перейдите на страницу Parameters. Используя кнопку Add, добавьте три строки с параметрами функции (рис. 24.6). Обратите внимание, что результат сложения мы возвращаем в третий выходной параметр Res. Сам метод возвращает значение типа HResult.

ОВне зависимости от решаемых задач все COM-методы должны возвращать значение типа HRESULT. Этот тип данных определен в модулях System, Types и Windows.

type HRESULT = type Longint;

В случае успешного завершения метод вернет S_OK. Значение S_FALSE свидетельствует о том, что метод не может выполнить операцию. Если интерфейс не поддерживается, будет возвращена константа E_INTERFACE. Катастрофическая ошибка -константа EUNEXPECTED и т. д.

На панели управления редактора нажмите кнопку Refresh Implementation и взгляните на модуль MyComObj. В секции protected листинга появилось объявление нашей новой функции, а в секции implementation описана заготовка ее реализации. Нам остается добавить лишь одну-единственную строку:

Res:=Value1+Value2;.

Научившись описывать методы, попробуем свои силы на свойствах. Допустим, требуется объявить новое свойство, способное обслуживать целочисленное значение. Чтобы определить новое свойство, в редакторе библиотеки типов выделите узел с интерфейсом IMyComObject и на панели управления нажмите кнопку New Property. В результате будут созданы два новых одноименных узла Property1. Такое раздвоение свойства объясняется тем, что один из узлов отвечает за чтение данных из свойства, а второй узел решает обратную задачу - записывает в свойство данные.

Переименуйте любой из узлов нового свойства, например в MyProperty. Тип данных, описываемых свойством, определяется на странице Attributes в ниспадающем списке Type. Для решения нашей задачи подойдет значение по умолчанию - целое число long.

Добавить комментарий


Защитный код
Обновить