Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП_ЛабРаботы.doc
Скачиваний:
13
Добавлен:
28.09.2019
Размер:
716.8 Кб
Скачать

Методика выполнения

  1. Запустите MS Visual Studio и создайте проект Windows-приложения.

  2. Разработайте графический интерфейс пользователя и экранную форму с учетом требований задания.

  3. Скопируйте и подключите к проекту модули объявления и определения классов из работы №8.

  4. Определите обработчики событий при нажатии кнопок и выбора пунктов меню для операций добавления, удаления, редактирования, отображения, поиска и сортировки.

  5. Переопределите методы классов, выполняющие операции консольного ввода/вывода, с учетом использования элементов графического интерфейса пользователя.

Содержание отчета

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

Контрольные вопросы

  1. Назовите основные элементы управления, из которых строится графический интерфейс пользователя Windows-приложения?

  2. Объясните устройство основных компонентов Windows-интерфейса пользователя – окно, блок диалога, элемент управления, кнопка, редактор, список, комбинированный список, полоса прокрутки, метка.

  3. Объясните устройство дополнительных элементов управления – изменяемый список, просмотр списка, строка состояния, подсказка, просмотр деревьев, вкладка, окно свойств, индикатор.

  4. Что такое ресурсы приложения?

  5. Объясните суть понятия интерфейс программирования приложения(API).

  6. Что такое оконная процедура? Как работают программы, управляемые событиями?

  7. В чем заключается визуальное программирование, его достоинства и недостатки?

  8. Объясните назначение функции WinMain.

Лабораторная работа №9 разработка и использование com-сервера

Цель работы – освоение на практике методов создания COM-серверов с помощью библиотеки ATL и их использование в приложениях на C++.

Задание

  1. Разработать на языке С++ с помощью библиотеки ATL внутрипроцессный COM-сервер для установки и проверки прав доступа пользователей к функциям приложения.

  2. Список пользователей и права доступа хранить в виде файла на диске в рабочем каталоге сервера доступа.

  3. Интерфейс COM-сервера должен содержать методы для добавления, удаления и редактирования записей о пользователях, а также метод для проверки права пользователя на доступ к функции.

  4. В версию приложения из работы №8 добавить вызов при загрузке приложения метода подключения к COM-северу. Если пользователю запрещена работа с приложением, то должен быть предусмотрен автоматический выход из приложения.

  5. Добавить в меню приложения вызов функций добавления, удаления и редактирования записей о пользователях.

  6. Перед вызовом каждой функции приложения выполнять проверку права доступа пользователя к данной функции и исполнять только разрешенные функции.

Краткая теория

Основные понятия COM-технологии

Компонентный подход предпо­лагает построение программного обеспечения из отдельных компонентов - физически отдельно существующих частей программного обеспечения, ко­торые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты-компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую тех­нологию.

Компонентный подход лежит в основе COM-технологии фирмы Microsoft. По технологии СОМ приложение предоставляет свои службы, исполь­зуя специальные объекты - объекты СОМ, которые являются экземплярами классов СОM. Объект СОМ так же, как обычный объект включает поля и ме­тоды, но в отличие от обычных объектов каждый объект СОМ может реализовывать несколько интерфейсов, обеспечивающих доступ к его полям и функциям. Это достигается за счет организации отдельной таблицы адресов методов для каждого интерфейса (по типу таблиц виртуальных методов). При этом интерфейс обычно объединяет несколько однотипных функций. Кроме того, классы СОМ поддерживают наследование интерфейсов, но не поддерживают наследования реализации, т. е. не наследуют код методов, хо­тя при необходимости объект класса-потомка может вызвать метод родителя.

Каждый интерфейс имеет два имени: символьное неуникальное имя, начинающееся с символа «I», например, IAccessControl, и глобаль­ный уникальный идентификатор интерфейса IID (Interface IDentifier). Любой глобально уникальный идентификатор (GUID) представляет собой автоматически генерируемое 128-разрядное двоичное число (16 байтов).

Любой объект СОМ обязательно реализует интерфейс IUnknown. Использование этого интерфейса позволяет управлять временам жизни объекта (методы AddRef() и Release()) и по­лучать доступ к остальным интерфейсам объекта (метод QueryInterface()). IUnknown является главным интерфейсом для COM, все остальные интерфейсы – его наследники, т.е. наследуют все его операции.

Объект всегда функционирует в составе сервера — динамической библи­отеки или исполняемого файла, которые обеспечивают функционирование объекта. Различают три типа серверов:

  • внутрипроцессный сервер - реализуется динамическими библиотеками (DLL), которые подключаются к приложению-клиенту и работают в одном с ними адрес­ном пространстве - наиболее эффективный сервер, кроме того, он не требу­ет специальных средств;

  • локальный сервер - создается отдельным процессом, который работает на одном компьютере с клиентом;

  • удаленный сервер - создается процессом, который работает на другом компьютере.

Для обращения к службам клиент должен получить указатель на соот­ветствующий интерфейс. Клиенту требуется отдельный указатель для каждого интерфейса, операции которого он намерен использовать. Перед первым обращением к объекту клиент посы­лает запрос к библиотеке СОМ, хранящей информацию обо всех, зарегист­рированных в системе классах СОМ объектов, и передает ей имя класса, идентификатор интерфейса и тип сервера. Библиотека запускает необходи­мый сервер, создает требуемые объекты и возвращает указатели на объекты и интерфейсы. Получив указатели, клиент может вызывать необходимые функции объекта аналогично вызову локальной функции.

Взаимодействие клиента и сервера обеспечивается базовыми механиз­мами СОМ, поэтому клиенту безразлично местонахождение объ­екта. При использовании локальных и удаленных серверов в адресном про­странстве клиента создается рrоху-объект - заместитель объекта СОМ, а в адресном пространстве сервера СОМ — заглушка, соответствующая клиенту. Получив задание от клиента, заместитель упаковывает его параметры и, ис­пользуя службы операционной системы, передает вызов заглушке. Заглушка распаковывает задание и передает его объекту СОМ. Результат возвращается клиенту в обратном порядке. Такой механизм называется маршалингом.

Создание COM-объекта базируется на использовании функций библиотеки COM. Доступ к услугам библиотеки выполняется с помощью вызовов обычных функций, имена которых чаще всего начинаются с префикса «Co», например, CoCreateInstance – создание COM-объекта по идентификатору его класса CLSID и идентификатору интерфейса IID. При этом для определения местоположения исполняемого файла или DLL, который нужно запустить или загрузить, используется системный реестр.

При другом способе клиент может создать несколько COM-объектов одного и того же класса. Для этого используется фабрика класса – COM-объект, генерирующий объекты одного конкретного класса. Фабрика класса поддерживает интерфейс IClassFactory с методами CreateInstance и LockServer. Первый создает COM-объекты этого класса и возвращает указатель на нужный интерфейс, а второй сохраняет фабрику класса в памяти. Клиент вызывает фабрику класса с помощью функции библиотеки COM CoGetClassObject(<CLSID объекта>,<IID интерфейса IClassFactory>), которая возвращает указатель на интерфейс IClassFactory.