Шрифт:
Нет ни одной книги (на английском) о СОМ, DCOM, OLE или ActiveX, которую бы я не прочитал. Вы, вероятно, найдете мое имя в качестве технического обозревателя в списке разработчиков. Я также сам написал множество статей об этих технологиях, и был первым издателем СОМ Specification (Спецификация СОМ). Я провел сотни презентаций СОМ для технических и нетехнических аудиторий. Из всего этого должно быть ясно, что я потратил огромное количество времени и энергии, чтобы найти наилучший способ объяснить, что такое СОМ.
А теперь, похоже, весь мой тяжкий труд пропал даром, поскольку после прочтения последнего чернового варианта этой книги мне стало ясно, что никто не объясняет СОМ лучше, чем Дон Бокс.
Надеюсь, что вы насладитесь этой прогулкой в той же мере, как и я.
Чарли Киндел (Charlie Kindel)
СОМовец (СОМ guy), корпорация Microsoft
Сентябрь 1997 г.
Предисловие Грэйди Буча
Порой о книге можно не просто сказать много хорошего, а сказать это дважды. Это одна из причин, по которой к книге Дона написано два предисловия – она заслуживает этого.
Если вы занимаетесь созданием систем для Windows 95 или NT, вы никак не можете обойтись без СОМ. Visual Studio, и особенно Visual Basic, скрывают некоторые сложности СОМ, но если вы: а) действительно хотите понять, что происходит «за кулисами» и/или б) использовать мощность СОМ, то книга Дона – для вас.
Что мне особенно нравится в этой книге, так это путь, которым идет Дон, освещая СОМ для читателя. Сначала перед вами открываются проблемы создания рассредоточенных и действующих одновременно систем; затем вам подробно и тщательно объясняют, как эти проблемы решает СОМ. Даже если вы не знаете абсолютно ничего о СОМ, когда начинаете читать эту книгу, вас проведут по простой и понятной концептуальной модели СОМ, после чего вы поймете все задачи, которые СОМ ставит перед собой, и вам станет ясен характер сил, придающих ему ту структуру и тот образ действий, которыми он обладает. Если же вы – опытный разработчик СОМ, то вы в полной мере оцените предложенные Доном остроумные и нестандартные способы применения СОМ для решения обычных задач.
СОМ – наиболее широко используемая объектная модель для разработки рассредоточенных и действующих одновременно систем. Эта книга поможет вам использовать СОМ для успешного развития такого рода систем.
Грэйди Буч (Grady Booch)
От автора
Моя работа завершена. Наконец-то я могу отдохнуть, осознав, что наконец изложил на бумаге то, что часто называют развернутой летописью СОМ. Книга отражает эволюцию моего собственного понимания этой норовистой технологии, которую фирма Microsoft в 1993 году сочла достаточно послушной для показа программистскому миру. Хотя я и не присутствовал на конференции профессиональных разработчиков по OLE (OLE Professional Developer's Conference), я по-прежнему чувствую себя так, как будто я занимаюсь СОМ всегда. После почти четырех лет работы с СОМ я с трудом вспоминаю доСOМовскую эру программирования. Тем не менее, я прекрасно помню свой мучительный путь через прерию СОМ в начале 1994 года.
Прошло около шести месяцев, прежде чем я почувствовал, что понял в СОМ хоть что-либо. В течение этого шестимесячного стартового периода работы с СОМ я мог успешно писать СОМ-программы и почти мог объяснить, почему они работают. Однако у меня не было органического понимания того, почему модель программирования СОМ была тем, чем она была. К счастью, в один из дней, а именно 8 августа 1994 года, примерно через шесть месяцев с момента покупки книги OLE2 изнутри (Inside OLE2), на меня снизошло прозрение, и в одночасье СОМ стал для меня понятен. Это никоим образом не означало, что я понимал каждый интерфейс СОМ и каждую API-функцию. Но я в значительной степени понял главные побудительные мотивы СОМ. А значит, стало ясно, как применить эту модель программирования к ежедневным программистским задачам. Многие разработчики испытали нечто похожее. А так как я пишу это введение три августа спустя, эти разработчики все еще вынуждены пройти сквозь этот шестимесячный период ожидания, прежде чем стать продуктивными членами сообщества СОМ. Я хотел бы надеяться, что моя книга сможет сократить этот период, но обещаний не даю.
Как подчеркивается в этой книге, СОМ – это в большей степени стиль программирования, чем технология. С этих позиций я стремился не вбивать в читателя подробные описания каждого параметра каждого метода каждого интерфейса. Более того, я старался выделить сущность того, чему в действительности посвящена СОМ, предоставив документации по SDK заполнить пробелы, остающиеся в каждой главе. Насколько это возможно, я стремился скорее обрисовать те напряжения, которые лежат в основе каждого отдельного аспекта СОМ, нежели приводить подробные примеры того, как применять каждый интерфейс и каждую API-функцию к какой-нибудь хитроумной иллюстративной программе. Мой собственный опыт показал, что как только я понял почему, понимание как последовало само собой. И наоборот, простое понимание как редко ведет к адекватному проникновению в суть с тем, чтобы экстраполировать за пределы документации. И если кто-то надеется быть в курсе непрерывного развития этой модели программирования, то глубокое понимание ее сути необходимо.
СОМ является чрезвычайно гибкой основой для создания рассредоточенных объектно-ориентированных систем. Чтобы использовать эту гибкость СОМ, часто требуется мыслить вне ограничений, диктуемых документацией по SDK, статьями или книгами. Моя личная рекомендация состоит в том, чтобы осознать: все, что вы читаете (в том числе и эта книга), может быть неверным или вопиюще устареть, и вместо этого необходимо сформировать свое собственное понимание этой модели программирования. Безошибочный путь к пониманию этой модели программирования состоит в том, чтобы сконцентрироваться на совершенствовании базового словаря СОМ. Это может быть достигнуто только через написание программ в стиле СОМ и анализ того, почему эти программы работают так, как они работают. Чтение книг, статей и документации может помочь, но в конечном счете только выделение времени на обдумывание четырех основных принципов СОМ (интерфейсы, классы, апартаменты (apartments) и обеспечение безопасности) может повысить вашу эффективность как разработчика СОМ.
Чтобы помочь разработчику сфокусироваться на этих базовых принципах, я постарался включить в книгу столько кода, сколько это возможно без того, чтобы откровенно снабжать читателей замысловатыми реализациями для простого копирования их в свой исходный код. А чтобы обеспечить в контексте представительство программной методики СОМ, в приложения В содержится одно законченное СОМ-приложение, которое служит примером применения многих концепций, обсуждаемых на протяжении всей этой книги. Кроме того, загружаемый код для этой книги содержит библиотеку кода СОМ-утилит, которые я счел полезными в моих собственных разработках. Некоторые части этой библиотеки детально обсуждаются в книге, но библиотека в целом включена для демонстрации того, как на деле создавать реализации C++. Заметим также, что большая часть кода, появляющегося в каждой главе, использует макрос assert (объявить) из С-библиотеки этапа выполнения (runtime) с целью подчеркнуть тот факт, что могут встретиться определенные условия «до» и «после». В готовом коде многие из этих операторов assert следует заменить каким-либо кодом, более терпимо обрабатывающим ошибки.