такого рода систем.
От автора
Моя работа завершена. Наконец-то я могу отдохнуть, осознав, что наконец изложил на бумаге то, что часто называют
Прошло около шести месяцев, прежде чем я почувствовал, что понял в СОМ хоть что-либо. В течение этого шестимесячного стартового периода работы с СОМ я мог успешно писать СОМ-программы и почти мог объяснить, почему они работают. Однако у меня не было органического понимания того, почему модель программирования СОМ была тем, чем она была. К счастью, в один из дней, а именно 8 августа 1994 года, примерно через шесть месяцев с момента покупки книги
Как подчеркивается в этой книге, СОМ – это в большей степени стиль программирования, чем технология. С этих позиций я стремился не вбивать в читателя подробные описания каждого параметра каждого метода каждого интерфейса. Более того, я старался выделить сущность того, чему в действительности посвящена СОМ, предоставив документации по SDK заполнить пробелы, остающиеся в каждой главе. Насколько это возможно, я стремился скорее обрисовать те напряжения, которые лежат в основе каждого отдельного аспекта СОМ, нежели приводить подробные примеры того, как применять каждый интерфейс и каждую API-функцию к какой-нибудь хитроумной иллюстративной программе. Мой собственный опыт показал, что как только я понял
СОМ является чрезвычайно гибкой основой для создания рассредоточенных объектно- ориентированных систем. Чтобы использовать эту гибкость СОМ, часто требуется мыслить вне ограничений, диктуемых документацией по SDK, статьями или книгами. Моя личная рекомендация состоит в том, чтобы осознать: все, что вы читаете (в том числе и эта книга), может быть неверным или вопиюще устареть, и вместо этого необходимо сформировать свое собственное понимание этой модели программирования. Безошибочный путь к пониманию этой модели программирования состоит в том, чтобы сконцентрироваться на совершенствовании базового словаря СОМ. Это может быть достигнуто только через написание программ в стиле СОМ и анализ того, почему эти программы работают так, как они работают. Чтение книг, статей и документации может помочь, но в конечном счете только выделение времени на обдумывание четырех основных принципов СОМ (интерфейсы, классы, апартаменты (apartments) и обеспечение безопасности) может повысить вашу эффективность как разработчика СОМ.
Чтобы помочь разработчику сфокусироваться на этих базовых принципах, я постарался включить в книгу столько кода, сколько это возможно без того, чтобы откровенно снабжать читателей замысловатыми реализациями для простого копирования их в свой исходный код. А чтобы обеспечить в контексте представительство программной методики СОМ, в приложения В содержится одно законченное СОМ- приложение, которое служит примером применения многих концепций, обсуждаемых на протяжении всей этой книги. Кроме того, загружаемый код для этой книги содержит библиотеку кода СОМ-утилит, которые я счел полезными в моих собственных разработках. Некоторые части этой библиотеки детально обсуждаются в книге, но библиотека в целом включена для демонстрации того, как на деле создавать реализации C++. Заметим также, что большая часть кода, появляющегося в каждой главе, использует макрос assert (объявить) из С-библиотеки этапа выполнения (runtime) с целью подчеркнуть тот факт, что могут встретиться определенные условия «до» и «после». В готовом коде многие из этих операторов assert следует заменить каким-либо кодом, более терпимо обрабатывающим ошибки.
Одним из недостатков издаваемых книг является то, что они часто устаревают уже к моменту их появления на книжных прилавках. И эта книга не исключение. В частности, предстоящий выход в свет СОМ+ и Windows NT 5.0 несомненно сделают некоторые аспекты этой книги неверными или по крайней мере неполными. Я старался предугадать, какую эволюцию придется претерпеть модели СОМ из-за выхода Windows NT 5.0, однако в момент написания этого текста Windows NT 5.0 еще не прошла внешнее тестирование, и вся информация подлежит изменениям. СОМ+ сулит усовершенствовать модель еще дальше; но было, однако, невозможно включить охват СОМ+ и в то же время выпустить мой манускрипт в этом году. Я настоятельно рекомендую вам изучать как Windows NT 5.0, так и СОМ+, когда они станут доступны.
Я должен был принять еще одно мучительное решение – как обращаться к различным коммерческим библиотекам, привыкшим реализовывать компоненты СОМ на C++. Заметив в различных группах новостей Интернета одни и те же проблемы, я предпочел игнорировать ATL (и MSC) и вместо этого сосредоточиться на повседневных темах СОМ, с которыми должен справляться каждый разработчик независимо от того, какой библиотекой он пользуется. Все больше и больше разработчиков создают спагетти ATL и удивляются, почему ничего не работает. Я твердо уверен, что невозможно выучить СОМ, программируя в ATL или MSC. Это не значит, что ATL и MSC не являются полезными инструментами для разработки компонентов СОМ. Это просто означает, что они не годятся для демонстрации или изучения принципов и технологий программирования в СОМ. Поэтому ATL не подходит для книги, сосредоточенной на модели программирования СОМ. К счастью, большинство разработчиков находят, что если есть понимание СОМ, то одолеть основы ATL не составит особого труда.
Наконец, цитаты, которыми начинается каждая глава, – это мой шанс написать для малого раздела книги то, что мне хочется. А чтобы сохранить насколько возможно непрерывность моего изложения, я ограничил свои необузданные и отклоняющиеся от темы сюжеты не более чем 15 строками кода C++ на главу. Обыкновенно этот код/цитата отражает доСОМовский подход к проблеме или концепции, представленной в данной главе. Предлагаю читателю в качестве упражнения попытаться на основе этих намеков реконструировать мое душевное состояние при написании каждой конкретной главы.
Благодарности
Написать книгу невероятно трудно – по крайней мере, для меня. Но я определенно знаю, что два человека страдали больше, чем я, – это моя терпеливая жена Барбара и мой снисходительный сын Макс