Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. раб. 3

.doc
Скачиваний:
14
Добавлен:
06.05.2017
Размер:
37.38 Кб
Скачать

Лабораторная работа №3

Создание и использование внепроцессного COM-сервера с библиотекой типов

Цель: получить навыки создания внепроцессного СОМ-сервера с библиотекой типов.

Краткие теоретические сведения

Чтобы сделать СОМ-сервером ЕХЕ-файл, следует просто добавить в приложение модуль с СОМ-объектом. От заполнения данных в окне мастера создания СОМ-объекта зависит реализация создаваемого СОМ-объекта.

В поле «Class Name» вводится имя класса Delphi, реализующего СОМ-сервер. Мастер создает заготовку класса с этим именем. Под этим же именем СОМ-сервер будет зарегистрирован в реестре.

Раскрывающийся список «Instancing» позволяет выбрать режим создания СОМ-объектов. Доступны следующие значения (выбранное значение имеет смысл только для ЕХЕ-серверов, для DLL оно игнорируется):

  • Internal – объект может использоваться только внутри этого приложения;

  • Single Instance – создание каждого экземпляра объекта приводит к запуску нового экземпляра приложения-сервера; после создания объекта фабрика классов приложения удаляет информацию о себе из системного списка зарегистрированных фабрик, что заставляет СОМ при создании нового объекта запустить приложение сервер в новом процессе;

  • Multiple Instance – после создания экземпляра объекта фабрика классов не удаляет себя из списка зарегистрированных; при построении запроса на создание нового объекта СОМ обнаружит ее в этом списке и запросит у той же фабрики новый экземпляр объекта, который будет создан в том же приложении (другими словами, для создания всех объектов данного типа будет запущено не более одного экземпляра сервера).

Раскрывающийся список «Threading Model» позволяет выбрать модель потоков сервера.

Поле «Implemented Interfaces» доступно только в том случае, если объект не использует библиотеку типов. В этом случае необходимо описать интерфейсы в коде приложения и перечислить их в этом поле.

Кнопка «List» позволяет выбрать интерфейс из числа зарегистрированных на данном компьютере.

В поле «Description» при желании вводят описание объекта.

Установка флажка «Include Type Library» приводит к включению в сервер библиотеки типов. СОМ предоставляет стандартные средства работы с библиотеками типов. В частности, Delphi может импортировать имеющуюся в сервере библиотеку типов и автоматически построить по ней интерфейсный модуль для работы с ним. Если флажок установлен, объект наследуется от класса TTypedComObject, если флажок снят – от класса TComObject.

Установка флажка «Mark interface OleAutomation» делает СОМ-сервер совместимым с технологией OLE Automation. В этом случае следует использовать в методах интерфейса только совместимые с технологией OLE Automation типы данных. Это необходимо, если нужно передавать параметры вызова интерфейса между разными апартаментами. Такая операция, называемая маршалингом (marshalling). Однако если установить флажок Mark interface Oleautomation, эту задачу решает маршалер OLE, избавляя разработчика от лишней работы.

Ход работы

1 Создать внепроцессный сервер в виде исполнимого EXE-файла с библиотекой типов. Выполнить реализацию методов интерфейса согласно индивидуальному заданию (см. лабораторную работу №1).При разработке СОМ-сервера предусмотреть его работу в режиме одного экземпляра.

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

3 Запустить несколько копий клиентского приложения и отследить их взаимодействие с СОМ-сервером.

4 Изменить параметры конструктора фабрики классов для обеспечения работы СОМ-сервера в режиме множественных экземпляров.

5 В ходе защиты лабораторной работы необходимо продемонстрировать знания основ технологии СОМ, классов и интерфейсов, создаваемых при ее реализации.

Соседние файлы в предмете Кросс-платформенное программирование