Разработка COM-приложений в среде Delphi

Эрик Хармон

Delphi COM Programming
книга Разработка COM-приложений в среде Delphi

Тираж данной книги закончился.
Введение
Файлы к книге

Книга посвящена методике разработки приложений на базе модели составных объектов (COM) в среде Delphi. В первых пяти главах детально рассматриваются основные идеи модели COM и способы ее реализации в среде Delphi. Здесь же достаточно подробно описаны два распространенных программных продукта, которые могут служить основой для создания разнообразных прикладных COM-приложений - Microsoft ADO и Microsoft Agent. В последующих четырех главах возможности COM-технологии рассматриваются более углубленно. Читатель знакомится с методикой создания сетевых взаимодействующих приложений, средствами хранения структурированных данных в едином файле, наборами свойств и контейнерами OLE, использованием модели COM для расширения возможностей оболочки Windows.
Книга рассчитана на читателей, имеющих опыт работы в среде Delphi.

464 стр., с ил.; ISBN 5-8459-0074-3, 1-57870-221-6; формат 70х100/16; серия Circle; 2000, 2 кв.; Вильямс.



Понравилась книга? Порекомендуйте её друзьям и коллегам:







Об авторах

Эрик Хармон (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.

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

Краткая история развития 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]. Обещаю вам ответить настолько срочно, насколько это будет в моих силах.


Copyright © 1992-2019 Издательская группа "Диалектика-Вильямс"

Rambler  Top100