Об авторах
Эрик Хармон (Eric Harmon) уже более 15 лет занимается программированием. С 1985 года он разрабатывает программы на языке Pascal — сначала в среде Turbo Pascal, а затем в Delphi. Эрик — член группы квалифицированных специалистов TPX, добровольно оказывающих помощь компании TurboPower Software Company в обслуживании ее групп новостей. Ему принадлежит множество статей, опубликованных в журнале Visual Developer Magazine.
Эрик Хармон живет во Флориде со своей женой Тиной и домочадцами — кошкой Принцессой и псом Оскаром. Если Эрик не занят программированием, его можно застать за чтением книг, игрой в карты (по-научному), прослушиванием музыкальных записей (если только он не умчался куда-нибудь на мотоцикле). С Эриком можно связаться по адресу: [email protected].
О технических рецензентах
Все программы и иллюстративные материалы, включенные в книгу Разработка COM-приложений в среде Delphi, были тщательно проверены в процессе рецензирования. Рецензенты подключились к работе над книгой еще на стадии обсуждения ее содержания и компоновки отдельных разделов и проверяли материал на протяжении всего процесса подготовки книги к печати. Такая обратная связь стала надежнейшей гарантией того, что в книгу включен материал, в полной мере удовлетворяющий потребности самого взыскательного читателя и предлагающий техническую информацию самого высокого качества.
Уэйн Ниддери (Wayne Niddery) — независимый разработчик программного обеспечения. Для него, работающего уже более 16 лет в самых разнообразных областях, Delphi с первых дней появления на свет стала предпочтительным инструментом в работе. Член группы TeamB с сентября 1998 года, он регулярно представляет свои материалы в группе новостей Delphi. Уэйн является соавтором популярного издания Borland Delphi How-To (1995, The Waite Group) и техническим редактором Delphi 3 Super Bible (1997, The Waite Groupie). Уэйн обитает в Торонто (Канада) вместе с женой Соней, сыном Кертисом и другом семьи псом Пэтчем.
Дэнни Торп (Danny Thorpe) — ведущий инженер по части Delphi и C++ Builder в группе разработчиков компании Inprise Corporation. В настоящее время занимается программным ядром библиотеки VCL, графическими классами, системой управления потоками, библиотекой времени выполнения RTL, классами табличных форм, редакторами свойств в процессе разработки и архитектурой построителя форм. Через его руки прошли все программные продукты на базе языка Pascal, разработанные в Borland/Inprise, начиная с Turbo Pascal 6.0, который был создан в 1990 году. Дэнни также принимал участие в качестве научно-технического редактора в издании более сорока книг, касающихся программирования в среде Delphi. Кроме того, он — автор книги Delphi Component Design (1997, Addison Wesley).
Посвящение
Посвящается памяти миссис Мак, моей школьной учительницы английского языка, которая подталкивала нас к знаниям чуть жестче, чем прочие.
Введение
Эта книга посвящена методике программирования COM в среде Delphi. Существует немало прекрасных книг о программировании в среде Delphi для пользователей самого разного уровня подготовки. Есть также несколько отличных книг, достаточно подробно описывающих технологию COM. А вот книги, которая могла бы служить настольным руководством по программированию COM для тех, кто работает в среде Delphi, не было, но только до сих пор.
Для кого предназначена эта книга
Как понятно из самого названия, книга ориентирована на тех, кто программирует в среде Delphi. А если более точно, то на программистов, которые чувствуют себя в этой среде достаточно комфортно, но с технологией COM знакомы понаслышке, однако очень хотели бы овладеть этой методикой как можно быстрее, что не удается сделать с помощью уже изданных ранее пособий.
Если ранее вы уже читали какие-либо материалы о COM — статьи или более обширные руководства — но не знаете, с какой стороны начать освоение технологии COM применительно к приложениям, создаваемым в среде Delphi, не отчаивайтесь! Среда предоставит в ваше распоряжение множество языковых средств и мастеров, которые значительно облегчат или даже возьмут на себя большинство забот, вызывающих у большинства головную боль при упоминании о традиционных приемах программирования технологии COM.
Эта книга предполагает, что читатель довольно хорошо освоил основные приемы работы в среде Delphi, так что я не буду останавливаться на их подробном описании. Если вы чувствуете потребность освежить в памяти знания о Delphi, к вашим услугам Приложение, в котором приведен довольно внушительный список книг о Delphi для читателей самого различного уровня подготовки, — от новичков до специалистов высокого класса.
Структура книги
Эта книга состоит из девяти глав. В главах с 1 по 5 детально рассматриваются основные идеи технологии COM и способы ее реализации в среде Delphi. Хотя материал последующих глав базируется на изложенном в этих первых, одно из прекрасных качеств технологии COM в том и состоит, что можно пользоваться отдельными ее компонентами, не вдаваясь глубоко в детали функционирования остальных. Естественно, чем глубже вы постигнете основы, тем более высокого уровня мастерства в программировании в Delphi достигнете, но можно начать программировать и после изучения материала любой из начальных глав не дожидаясь остальных из этой части книги.
Концепции, изложенные в первых главах, используются в последующих — с шестой по девятую, — где рассматриваются более специальные вопросы программирования COM. Например, в главе 9 показано, как расширить возможности оболочки Windows посредством COM разработав приложения, которые позволяют использовать системный лоток (tray).
Таким образом, эту книгу можно использовать двояко. Во-первых, она может служить учебным пособием по COM, которое нужно читать последовательно, глава за главой. Во-вторых, ее можно использовать как настольный справочник, отдельные главы которого можно перечитывать, углубляя свои познания в том или ином специфическом вопросе применения COM. По этой причине ниже приводится небольшой путеводитель по материалу дальнейших глав, который поможет вам быстро найти необходимую информацию.
- В главе 1 Использование интерфейсов в Delphi вводится понятие интерфейса. Интерфейсы представляют собой базовые структурные блоки модели COM. Из материала главы вы узнаете, что интерфейсы — это удобные в использовании языковые компоненты со своими собственными правами в среде Delphi. Будет продемонстрировано, как создавать приложения Delphi на базе интерфейсов, даже не касаясь, по существу, модели COM.
- В главе 2 Интерфейсы и COM изложены те аспекты интерфейсов, которые были опущены в главе 1, и объясняется, как создать сервер COM в среде Delphi. Вы научитесь обновлять ранее разработанные серверы COM без вмешательства в фрагменты существующего программного кода, которые зависят от прежней версии этого сервера.
- В главе 3 Библиотеки типов рассматривается концепция библиотеки типов. Вы узнаете, что библиотеки типов представляют собой средство, с помощью которого серверы COM могут быть использованы практически любым конкретным компилятором, доступным сегодня на рынке программных продуктов.
- Глава 4 Автоматизация аккумулирует сведения, изложенные в предыдущих главах, применительно к клиентам и серверам автоматизации. Автоматизация обеспечивает функционирование механизма, посредством которого одно приложение может управляться изнутри другого.
- В главе 5 Элементы управления ActiveX и активные формы рассматриваются элементы управления и активные формы ActiveX. Вы научитесь без особого труда использовать в среде Delphi существующие элементы управления ActiveX и создавать свои собственные, которые можно представлять на рынке и рекомендовать не только программистам, работающим в Delphi, но и тем, кто работает с Visual C++, Visual Basic и другими языками.
- Глава 6 DCOM посвящена использованию изложенных в предыдущих главах концепций в сети. Будет показано, как разработать распределенные приложения, которые смогут взаимодействовать друг с другом как через локальную сетевую среду, так и через глобальную.
- В главе 7 Хранение структурированных данных изложены вводные сведения о хранении структурированных данных как средстве сохранения множества данных различных типов в одном файле. Вы увидите, какую роль при этом играют интерфейсы COM и как они позволяют без особого труда использовать файлы хранения структурированных данных в приложениях Delphi.
- Глава 8 Хранение структурированных данных и OLE продолжает материал предыдущей главы, в ней рассматриваются также наборы свойств OLE и контейнеры OLE. Наборы свойств OLE представляют собой универсальное средство сохранения специфической информации в файлах хранения структурированных данных. Например, одно приложение может сохранить имя автора в документе, а какое-либо другое, если оно имеет доступ к набору свойств OLE, может прочесть имя автора из файла документа, не имея никакого представления о структуре файла.
- В главе 9 Программирование оболочки Windows описано, как разработать некоторые из средств общего назначения, расширяющих возможности оболочки Windows, в частности программы работы с контекстными меню, отслеживания операций копирования, настройки системного лотка.
Компоненты, разработанные в книге
Хотя эта книга и не является специальным пособием по разработке компонентов, в тексте есть несколько разделов, в которых имело смысл разработать специальные компоненты Delphi, инкапсулирующие методы реализации описанных идей. По этой простой причине исходный текст сопроводительных программ включает пакет DCP (аббревиатура от Delphi COM Programming). Пакет предлагается в трех вариантах: DCP3 для версии Delphi 3, DCP4 для версии Delphi 4 и DCP5 для тех, кто программирует в среде версии Delphi 5. Пакет включает следующие компоненты:
- EventSink — средство для упрощения формирования реакции на события, происходящие в клиенте автоматизации (используется в главе 4);
- PropertySet — считывает и записывает набор свойств OLE (используется в главе 8);
- TrayIcon — управляет пиктограммами системного лотка (используется в главе 9).
Приложения
Каждая глава книги включает несколько программ, которые помогут вам быстрее освоить методику программирования COM. Большинство примеров написано для Delphi 4, а затем повторно откомпилировано в Delphi 5.
За небольшим исключением все примеры, представленные в книге, компилируются в версиях Delphi 3, Delphi 4 и Delphi 5. В некоторых случаях будут представлены директивы компилятора, которые необходимы для специальной настройки Delphi 3. Несколько примеров не могут быть реализованы в версии Delphi 3, поскольку в них используются расширения языка, внедренные только в последующих версиях. Эти примеры особо отмечены в тексте книги.
Исходный программный код всех приложений из этой книги можно загрузить, обратившись по адресу http://www.newriders.com/delphi.
Ниже приведен список по главам приложений, которые включены в текст книги.
Глава 1
- GUIDDemo — наглядно показывает, как формировать глобальные уникальные идентификаторы (Globally Unique Identifiers — GUID);
- IntfDemo — демонстрирует концепцию интерфейсных ссылок для подсчета и управления жизненным циклом объектов COM;
- SortDemo — на конкретном примере демонстрирует, как реализовать порождающий алгоритм (подпрограмму сравнения/сортировки), используя интерфейсы;
- GrphDemo — реализация ряда более сложных функций интерфейса, таких как множественный интерфейс отдельного класса, разрешение имен методов и т.п. Эта программа демонстрирует, как использовать интерфейс для создания иерархии классов.
Глава 2
- Bin1Srv — демонстрирует, как создать простой сервер COM, который реализует одномерную оптимизацию (проблема NP-полноты);
- Bin1Cli — демонстрирует работу клиента, который получает доступ к серверу Bin1Srv;
- Bin1Srv2 — показывает, как обновить существующий сервер COM без изменения существующего программного кода клиента;
- Bin1Cli2 — обновленная версия Bin1Cli, которая позволяет использовать новые функции Bin1Srv2.
Глава 3
- TIViewer — демонстрирует считывание и интерпретацию содержимого библиотеки типов.
Глава 4
- UnitSrv — демонстрирует функционирование сервера, действующего изнутри вызывающего процесса, который выполняет взаимное преобразование размерностей (пересчитывает дюймы, футы, метры и т.п.);
- UnitCli — приложение-клиент для сервера UnitSrv;
- MemoDemo — простое приложение, которое используется в качестве базового для демонстрации методики добавления средств автоматизации в существующее приложение;
- MemoSrv — приложение MemoDemo с использованием автоматизации;
- MemoCli — приложение-клиент для сервера MemoSrv;
- EventSrv — простое приложение, которое демонстрирует, как сгенерировать события изнутри сервера автоматизации;
- EventMultSrv — модифицированная версия EventSrv, которая позволяет сообщить о событии сразу нескольким клиентам;
- EventMultCli — приложение-клиент для сервера EventMultSrv;
- EventCli5 — приложение-клиент для сервера EventMultSrv, в котором использованы специфические средства версии Delphi 5;
- IntfSrv — демонстрирует реализацию интерфейсов с обратным (callback) вызовом в серверах COM;
- IntfCli — приложение-клиент для сервера IntfSrv;
- ADO — демонстрирует, как получить из среды Delphi доступ к Microsoft Active Data Object (ADO).
Глава 5
- AgentTest — демонстрирует, как использовать в среде Delphi существующий элемент управления ActiveX;
- AgentDemo — расширенный пример, который демонстрирует некоторые возможности элемента управления ActiveX Microsoft Agent;
- ActiveX — показывает, как преобразовать визуальный компонент Delphi в элемент управления ActiveX;
- ActiveForm — показывает, как создать активную форму.
Глава 6
- DCOMServer — простой сервер DCOM, который используется для тестирования установки DCOM на вашем компьютере;
- DCOMClient — приложение-клиент для сервера DCOMServer;
- PartServer — приложение-сервер DCOM, которое может быть использовано для обслуживания склада деталей. Этот сервер демонстрирует методы доступа к удаленной базе данных без использования таких дорогостоящих средств, как MIDAS;
- PartAdmin — одно из двух приложений-клиентов для PartServer. Это приложение позволяет пользователю выполнять администрирование базы данных деталей — обновление цен или добавление записей о новых деталях в базу данных;
- PartStoc — другое приложение-клиент для PartServer. Это приложение позволяет пользователю просматривать и частично модифицировать текущую ведомость наличия деталей.
Глава 7
- CarDemo — показывает, какие преимущества имеет использование файлов хранения структурированных данных в приложениях Delphi;
- SSView — демонстрирует, как переходить от одного объекта к другому в файле хранения структурированных данных. Также показывает, как уплотнить такие файлы и устранить характерное для них "разбухание".
Глава 8
- PropDemo — показывает, как считывать и записывать набор свойств OLE в приложении Delphi;
- FindProp — служебная программа поиска файлов на жестком диске, которая использует при этом данные, сохраненные в наборе свойств OLE;
- OLECont — демонстрирует, как разработать приложение-контейнер OLE в среде Delphi.
Глава 9
- CtxDemo — демонстрирует методику разработки программы работы с контекстным меню;
- CHDemo — демонстрирует работу программы отслеживания операций копирования;
- LinkDemo — демонстрирует, как создавать и обновлять связи оболочки (средства ускоренного вызова);
- TrayDemo — демонстрирует процесс создания приложения, которое помещает пиктограмму в системный лоток;
- PropDemo — показывает, как в среде Delphi разработать программу работы с вкладкой свойств.
В следующем разделе будет приведен краткий обзор технологии COM.
Модель составных объектов COM
В этом разделе рассказывается о том, что представляет собой COM и почему эту технологию желательно использовать в приложениях, разработанных в Delphi. Этот материал также познакомит вас с историей разработки и становления этой технологии и путях ее дальнейшего развития.
Назначение COM
COM — это сокращение от Component Object Model (модель составных объектов). COM создавалась с прицелом на решение двух проблем, с которыми повсеместно сталкиваются программисты, работающие в операционной среде Windows.
- Эта модель предоставляет в распоряжение программиста спецификацию, на основе которой он может создавать объекты, способные функционировать в различной языковой и операционной средах.
- Модель определяет способы взаимодействия клиентских приложений, работающих на одной машине, с приложением-сервером, функционирующим на другой машине.
Краткая история развития COM
Технология COM начала развиваться как технология OLE — Object Linking and Embedding (связывание и внедрение объектов). В свою очередь, OLE появилось как одно из направлений развития технологии динамического обмена данными (Dynamic Data Exchange — DDE). Эти технологии позволяли клиентскому приложению получать и сохранять данные от приложения-сервера, а также получать информацию о самом приложении-сервере, чтобы при необходимости, по запросу пользователя, запустить это приложение — как правило, после двойного щелчка на пиктограмме, представляющей соответствующие данные.
По мере совершенствования технологии OLE фирма Microsoft включала в ее состав все новые функциональные возможности, такие как Automation — автоматизация (эта функция рассматривается в главе 4), OLE-элементы управления (за ними закрепилась аббревиатура OCX; рассматриваются в главе 5). В результате сам термин "связывание и внедрение объектов" устарел, и Microsoft объявила, что впредь за этим термином ничего не стоит и она может использовать его по своему усмотрению.
Если придерживаться точности в терминологии, то COM — это техническая реализация OLE, хотя четкой границы между этими терминами не существует и большинство пользователей полагает, что это одно и то же. Термин OLE, в принципе, относится к функциональным возможностям высокого уровня, как бы "надстроенным" над COM, в число которых входят "погружение", "запуск на месте", хранение структур и т.п.
Дальнейшее развитие COM
Хотя на сегодняшний день COM представляет собой законченную технологию, ее развитие на этом этапе не прекратилось. Сейчас Microsoft работает над следующим поколением этой технологии — COM+. В новой версии будут реализованы два наиболее существенных усовершенствования:
- автоматическая обработка подсчета ссылок;
- COM-объекты можно будет инспектировать во время выполнения.
Хочу обратить ваше внимание — обе эти возможности уже реализованы в Delphi. Как вы узнаете из главы 3, в настоящее время Delphi позволяет реализовать автоматический подсчет ссылок для COM-объектов в большинстве ситуаций. Кроме того, Delphi позволяет инспектировать объекты VCL-классов во время выполнения посредством информации о типе времени выполнения (Runtime Type Information — RTTI).
Можете быть вполне уверены — независимо от того, в каком направлении будет развиваться технология COM, специалисты фирмы Borland обязательно обеспечат, чтобы в Delphi можно было в полной мере использовать все самые последние достижения этой технологии.
Соглашения, принятые в этой книге
В книге Разработка COM-приложений в среде Delphi повсеместно приняты следующие соглашения относительно типографской разметки текста, которые помогут читателю четко различать назначение конкретных фрагментов текста.
- Полужирный моноширинный шрифт используется при первом упоминании определенных ключевых слов и операторов.
- Моноширинный шрифт курсивом используется для имен параметров.
- Обычный моноширинный шрифт используется для адресов в сети Web, листингов программ и наименований программных элементов в тексте.
Как связаться с автором
Если у вас возникнет желание связаться со мной по поводу возникших вопросов, пожеланий и замечаний касательно содержания книги, пожалуйста, без всякого стеснения присылайте свои сообщения электронной почтой по адресу: [email protected]. Обещаю вам ответить настолько срочно, насколько это будет в моих силах.