Программирование для интернета с использованием COM
Модель компонентных объектов (Component Object Model, COM) – это спецификация, разработанная компанией Microsoft для построения программных компонентов, используемых приложениями или программами Windows для расширения своих функциональных возможностей. С помощью COM программное обеспечение, написанное на одном языке (например, на C++), может работать с программой, написанной на другом языке (скажем, на Visual Basic), без перекомпиляции программных компонентов. Это означает, что динамически подключаемую библиотеку, разработанную в C++, можно вызывать из исполняемого файла, написанного на Visual Basic. При работе с активными серверными страницами (ASP) VBScript может вызвать функцию из объекта COM, созданного при помощи языка VB, C++ или любого другого. Веб-разработка с использованием технологии COM осуществляется посредством вызова в ASP функций, расположенных в COM-объектах.
Аббревиатура DCOM означает Distributed Component Object Model (Распределенная модель компонентных объектов). Эта модель функционирует аналогично COM с точки зрения построения и работы с программой, а отличается только способом применения и конфигурацией сервера. DCOM потребляет объекты COM, расположенные на других физических узлах.
Примечание. Термин "потребление" часто используется, когда речь идет о вызове программного обеспечения динамически подключаемой библиотеки (DLL) или другой библиотеки. Этот термин появился в результате изменения терминологии "клиент-сервер", описывающей взаимодействие между клиентом базы данных (программой, осуществляющей запрос или ввод данных) и самой базой. Термины "потребитель" и "провайдер" стали нормой при описании программных компонентов; они отражают процесс взаимодействия между программой, которая базируется на другой программе, и программой, которая обслуживает другую программу.
В отличие от обычного ASP-программирования (см. лекцию 12 курса "Администрирование web-серверов в IIS"), в COM-программировании активные серверные страницы используются в качестве системы организации. ASP упорядочивают HTTP-запросы в команды, осуществляют потребление COM-объектов, непосредственно выполняющих работу, и возвращают ответ клиенту. Преимуществом такого подхода является то, что программа в COM-объекте инкапсулирована в виде единого дискретного элемента, который можно целиком добавить или удалить из системы. Программное обеспечение разрабатывается таким образом, что программисты могут его использовать, но не могут изменять, поскольку к дистрибутиву исходный код не прилагается. В зависимости от языка построения COM-объекта заложенные в программу машинные инструкции могут быть двоичными, выполняемыми с большей производительностью, чем языки сценариев VBScript в ASP.
Архитектура типичного COM-приложения показана на рис. 1.1.
В настоящее время COM-программирование заключается в написании библиотек DLL ActiveX с помощью языка Visual Basic 6 (VB6). Хотя объекты COM можно создавать с помощью других языков, в данной лекции мы будем работать с VB6. Проект VB6 компилируется в обычный исполняемый файл, что полностью избавляет программиста от трудностей, присущих работе с языком описания интерфейса COM (IDL) и управлению архитектурой самого объекта. VB6 является стандартным языком программирования, интегрированная среда разработки (IDE) довольно проста, и поэтому любой пользователь напишет, скомпилирует и запустит программу без особых трудностей.
Примечание. Библиотека ActiveX DLL в VB6 является шаблоном проекта для создания COM-объекта.
Введение в Visual Basic 6
После запуска Visual Basic 6 отображается диалоговое окно New Project (Новый проект) (см. рис. 1.2), в котором выбирается тип проекта. Для построения COM-объектов веб-приложения выберите ActiveX DLL и нажмите на кнопку Open (Открыть).
В VB6 можно создать проекты других типов, например, исполняемые файлы и элементы управления ActiveX. Проекты ActiveX EXE и Standard EXE обычно используются при разработке приложений. Проект исполняемого файла мы рассмотрим далее при создании тестовой программы для библиотеки DLL ActiveX. В проекте ActiveX Control мы сгенерируем элемент управления ActiveX, передаваемый браузеру или используемый в приложениях рабочего стола.
Из-за ограничений, связанных с разработкой программ в VB runtime, элементы управления ActiveX, написанные на VB, не подходят для веб-разработки, поскольку после установки программы на клиенте зачастую требуется перезагрузка компьютера для работы с новым элементом управления ActiveX.
Настройка проекта ActiveX DLL
После выбора типа проекта будет создан новый проект с именем Project1 и новый класс Class1. Если сразу скомпилировать проект, то конечный файл будет называться по умолчанию Project1.dll, а идентификатор класса (CLSID), используемый для идентификации класса в команде ASP Server.CreateObject – Project1.Class1. Имена класса и проекта должны быть информативными, а не шаблонными именами по умолчанию. Классу следует присвоить имя применительно к сути создаваемого проекта, а проекту – имя, определяющее файл хранилища или исполнения, внутри которого будет находиться класс.
Примечание. Все COM-объекты, созданные с помощью проекта Active X DLL в VB6, имеют расширение .dll.
Пусть в нашем примере веб-приложение является частью интернет-проекта по выбору параметров мебели с именем ConfigSeat.
Объект "стул" определен в процессе сбора требований, а создаваемый класс предназначен для представления этого объекта и является частью бизнес-логики программного приложения. Данный класс логично назвать clsChair. Префикс cls определяет объект как класс. Элемент Auto List Members в функции Visual Basic IntelliSense отображает имена частей проекта и не различает классы и другие типы файлов, например, модули. Использование префикса cls облегчает идентификацию класса в списке Auto List Members.
Для изменения имени класса откройте окно свойств с помощью команды View\Properties Window (Вид\Окно свойств) и выберите класс в Project Explorer (Диспетчер проектов). Исправьте имя Class1 в области Name (Имя) на clsChair (см. рис. 1.3). (Остальные параметры в окне свойств не меняйте, поскольку для этого требуются глубокие знания процесса разработки VB ActiveX. В данной лекции этот вопрос не рассматривается.)
Вы можете также изменить имя проекта, щелкнув правой кнопкой мыши на имени проекта в Project Explorer (Диспетчер проектов).
В диалоговом окне свойств проекта во вкладке General (Общие) имеется текстовое поле Project Name (Имя проекта), в котором отображается имя по умолчанию Project1. В нашем примере назовем проект ConfigSeat. Удалите в текстовом поле имя Project1 и введите ConfigSeat (см. рис. 1.4).
Многие программисты не знают о существовании автоматической нумерации версий в VB6. Номера версий помогают определять последнюю версию разрабатываемой библиотеки DLL с помощью уникальных идентификаторов. При каждой компиляции программного кода номер версии увеличивается. Как правило, объект COM устанавливается на узел несколько раз. Потребители программного обеспечения должны использовать только одну версию (последнюю), и номера версий позволяют работать именно с этой версией. При отсутствии номеров версий для определения последней версии пришлось бы использовать дату создания файла. В некоторых ситуациях (особенно при совместной работе над проектом нескольких программистов) определение номера версии по дате не работает. Для включения автоматического присвоения номеров новым версиям проекта откройте вкладку Make (Создание) в диалоговом окне свойств проекта и отметьте опцию Auto Increment (Автоматическая нумерация). Если вы не сделаете это, ошибки в программе не возникнет. Опция Auto Increment (Автоматическая нумерация) по умолчанию не включена, но мы настоятельно рекомендуем включать ее в каждом проекте.