Математика | ||||
Лоуревс Харрис. Программирование OLE. Освой самостоятельно за 21 день: Пер. с англ.— М : БИНОМ, 1995. — 464 с.: ил. ISBN 0-672-30568-2 ISBN 5-7503-0056-0 Книга американского специалиста по новым программным технологиям посвящена практическому изучению OLE — объектно-ориентированного расширения Windows, позволяющего создавать интегрированные системы прикладных программ. Рассматривается архитектура OLE и подробно обсуждаются вопросы практического использования этой технологии в разработке приложений, удовлетворяющих современым требованиям к коммерческому программному обеспечению. Книга предназначена для программистов-разработчиков. | ||||
Содержание Введение...............................15 Неделя! . . . . ............................17 День 1. Введение в OLE........................19 Краткая история OLE.........................19 Архитектура OLE........................... 20 Объекты..............................21 Интерфейсы............................ 21 Компонентная модель объекта (Component Object Model) .......21 Структурированное хранилище .•..................21 Автоматизация.......................:... 22 Унифицированная передача данных.................22 Связывание и внедрение (Linking and Embedding) . . .-........22 Инструментальные средства OLE SDK ....'..............24 Docfile Viewer.......................... . 25 Тест автоматизации......................... 25 Просмотр IDataObject........................25 Генератор Class ID............ . . ...........25 Просмотр таблицы работающих объектов............... 25 Монитор сообщений LRPC......................25 OLE2View.........................; ... 26 Состояние процесса окна (Window Process Status)...........26 Модуль OLE 2 Free........................ . 26 Windows Executable.........................26 Создание библиотеки типов (Make Type Library)........... 26 Просмотр библиотеки типов..................... 26 Другие инструменты OLE ....................... 27 Regedit ............................... 27 Microsoft Visual Basic 3.0.....................; 27 Microsoft Excel 5.0.........................27 Microsoft Word б.О для Windows ...................28 Visio 2.0 or Shapeware........................ 28 Инициализация OLE.......................... 28 ' Заключение . .......•...................... 33 Вопросы и ответы...........................33 Семинар................................34 Опрос......................;........34 Упражнения............................34 Ответы к опросу ..........................34 Ответы к упражнениям ....................... 34 ,ень 2. lUnknown, IClassFactory...................35 Интерфейсы..............................35 , lUnknown.............................. . . 36 Querylnterface...........................36 Addref и Release..........................38 fUnknown объекта »,lUjiknawn интерфейса... . ,...........^*"( •:, ^л;; I^aaa9W^.^fcfclieu>»V '..'"• ;»••..• ••»• '."•'»• .';/.'........- - - **' " QUID.................................40 Регистрационная база данных.....................41 IClassFactory.............................42 Тестирование объекта........................44 Заключение........................ •.....45 Вопросы и ответы...........................46 Семинар................................46 Опрос..............................• 46 Упражнения.....-.......................46 Ответы к опросу..........................46 Ответы к упражнениям..........................46 День 3. Структурированное хранилище................ • 47 Хранилища (Storages)........• • •...........• • • *8 Корневое хранилище (Root Storage) .................48 Временные корневые хранилища ..................54 Преобразование файлов........................54 ; Производительность.........................54 EnumElements...........................55 | Соглашение о именах.........................56 j Режимы......... ........................• • 56 \ Транзакции.......•......................57 j Потоки................................58 ILockBytes . ..:................• • •........58 ,3 Наборы свойств (Property Sets)....................59 j Имена наборов свойств......................• 59 | Заголовок набора свойств.........•...........• 59 | Пары FormatID/Of fset.......................60 | Разделы ..............................60 | Свойства . . . ...........................60 Специфика Summary information (Краткой информации).......63 , OLEUI....................• •........... JJ 1 Summarylnfo...... ................•..... *™ 1 Хранилище............................. се 1 Заключение.................:............ I Вопросы и ответы .-....'.......... . ........... 66 | Семинар................................ I Опрос............................... 66 1 * Упражнения............................. 1 День 4. Простой автоматный сервер .......... ^ ...••• 67 | Реализация IClaasFactory для простого автоматного сервера OLE .... 67 | Реализация IDispatch в простом сервере-автомате ........... 69 >| Использование CreateStdDispatch................• • 70 1 Тестирование............... . . .А.......... I Строки....................••.....•••••'.'! Заключение.............................. ?^И Вопросы и ответы..........................' 1 Семинар..............................•• • *8 1 Опрос............................... . Щ^ !| Упражнение...........................• ?® | День 5. Сложный автоматный сервер......•...........85 Библиотеки типов...........................85 ODL.................................. 85 MkTypLib............................ , 87 Еще раз о регистрационной базе данных.....,..........91 Опции командной строки........................95 Дополнительные свойства и методы..................97 Заключение..............................ЮЗ Вопросы и ответы......., . . ................. 104 Семинар..........•......................105 Опрос...............................105 Упражнения............................105 Ответы к опросу.......................... 105 Ответы к упражнениям........................105 День в. Автоматный контроллер..................107 CLSIDFromProgID...........................107 CoCreatelnstance............................ 108 GetlDsOfNames............................109 VARIANTARG .............................. 110 Активация методов.......................... Ill Активация PropertyGet........................ 113 Активация PropertyPut........................ 114 Заключение..............................115 Вопросы и ответы.......................... .115 Семинар................................. 115 Опрос.............................. . 115 Упражнения............................115 Ответы к опросу..........................116 Ответы к упражнениям . ......................116 День 7. Агрегированные объекты.................. 117 Подкласс объекта . . . ........................ 117 Еще раз об интерфейсах........................ 121 Счетчик ссылок............................ 122 Как определить, какие объекты могут быть агрегированы?......122 Заключение..............................125 Вопросы и ответы...........................125 Семинар............4 . .................. 126 Опрос.....................:........,126 Упражнения '............................ . 126 Ответы к опросу......................... . 126 Ответы к упражнениям....................... 126 Неделя 1. Заключительный обзор.................. 127 Неделя 2.............................""..1*6 День 8. Компонентная модель объекта (СОМ) . . .......... .147 Еще раз об интерфейсах........................147 IMalloc........................ . .......148 Alloc . . .............................. 148 Realloc.............................; . 148 Free................................149 GetSlze . ...............................149 DidAlloc.............................. 149 HeapMinimize . . . ........................149 API компонентной модели объекта...................149 CoBuildVersion...........................149 Colnitialize.............................150 CoUninitialize............................150 CoGetMalloc............................ 150 CoGetCurrentProcess.............. . . . -........150 CoGetClassObject..........................150 CoCreatelnstance..............'. j.......... 151 Перечислители........................... . 151 Next................................152 Skip................................152 Reset :................................152 Clone..................................152 Формировка (marshaling)........................ 152 Заключение.............................. 153 Вопросы и ответы ...........................153 Семинар................................154 Опрос............................... 154 Упражнение............................154 Ответы к опросу.......................... 154 Ответ к упражнению..........' ..............155 День 9. Унифицированная передача данных............157 IDataObjeci............................ . . 157 Буфер обмена Clipboard....................... 157 DDE .'....'............................158 OLE 1...............................158 Drag and drop............................158 OLE 2........................:...... 158 Операции с буфером Clipboard до OLE................ 159 Операции с буфером Clipboard в OLE . . ...............159 FORMATETC ............................159 STGMEDIUM...........................160 GetData.............................. 161 GetDataHere............................161 QueryGetData . . ..........................162 , GetCanonicalFormatEtc........................162 SetData....................... .,......162 j EnumFormatEtc....................'......162 Jj Уведомляющие методы....................... 163 OLEUI................................. 163 OleStdEnumFmtEtcjCreate.....................163 | OleStdEnumFmtEtcJDestroy...................' . . 163 | Простой пример обмена данными через Clipboard.........., . 163 ,j Заключение.............................. 170 ' Вопросы и ответы ................,....'.....". 171 Семинар..............................4 .. 171 Опрос............................. ; , 171 Упражнения............................ 172 Ответы к опросу . .........................172 Ответы к упражнениям ...................... День 10. Уведомления....................... DDE................................. Снова IDataObject......................... DAdvise............................. DUnadvise............................ EnumAdvlse........................... DLL...... ^^........; .........................187 \V| IDataAdviseHolder........................... 190 SendOnDataChange........................ . 190 lAdviseSink..............................191 • OnDataChange...........................191 Заключение........•.............'.........192 Вопросы и ответы...........................192 Семинар............................... . 193 Опрос...............................193 Упражнения............,............... 193 Ответы к опросу................._•......... 193 Ответы к упражнениям.......................193 День 11. Именование и присоединение...............195 Внедрение и связывание........................195 Устойчивые объекты.........................'. 198 /Persist............................... 198 IPersistStorage........................... 198 IPersistFile..................'........... 201 IPersistStream . . .........................202 Присоединение связанного •объекта................... 202 Упрощенное описание действий контейнера .............203 Заключение.............................. 204 Вопросы и ответы...........................204 Семинар............................... . 205 Опрос............. . ................. 205 Упражнения............................205 Ответы к опросу.......................... 205 Ответы к упражнениям.......................205 День 12. DLL-сервер OLE ...................... 207 Серверы составных документов....................207 Локальный сервер.......................... 207 Внутренний сервер......................... 208 Внутренний менеджер........................209 Внутренний менеджер (продолжение)................. 209 Различия.............................. 209 Регистрационная информация . . . .................211 Пошаговая реализация Inproc-сервера.................213 Шаг 0 — Прекймпилированный заголовочный файл .....". ... 213 Шаг 1 — Инициализация и деинициализация DLL......... . 214 Заключение.............................. 264 Вопросы и ответы............................265 Семинар . ...............................265 Опрос................'• • .-.........• . . 265 Упражнения........................... .265 Ответы к опросу ..........................265 Ответы к упражнениям.......................266 День 13. ЕХЕ-сервер OLE . . ................... . 267 Управление составными документами.................267 ЕХЕ-сервер..............................267 Создание локального сервера — последовательность шагов.......268 Шаг о — Прекомпилируемый заголовок...............269 Шаг 1 — Инициализация и завершение . ..............269 Шаг 2 — Реализация IClassFactory..........•......271 Шаг 3 — Процедура регистрации и тестирования...........271 щаг 4 — Реализация базового объекта................273 Шаг 5 — Реализация IDataObject...............• • • 273 Шаг 6 — Реализация IPersistStorage ....... .'...•.......275 Шаг 7 — Реализация lOleObject................... 275 Заключение...........•..................~77 Вопросы и ответы.................• • •.......279 Семинар...........,....................279 Опр°с • •............................' ' 'ото Упражнения............................*'" Ответы к опросу..........................279 Ответы к упражнениям....................... 280 День 14. Поддержка связывания в сервере OLE..........• 281 Связывание ..............................281 Шаг 1 — Изменение структуры приложения..........' • • • 281 Шаг 2 — Связь с таблицей запущенных объектов...... . • • • .282 Шаг 3 — Реализация IPersistFile..................283 OQO Еще раз о вставках........................• • *°~ Заключение.............................. 285 • Вопросы и ответы . . :........................2.8? Семинар........................•.....' 'Щ Опрос, . /.................-............285 Упражнения............................?*•? Ответы к опросу........................... 286 Ответы к упражнениям.......................286 Неделя 2. Заключительный обзор..................287 Недея* 3............................. . 317 День 15. Активация по месту в серверах OLE . .......... . 319 Активация по месту...........•.......• •.....319 Изучите вашу библиотеку классов...................321 Шаг 1 — IOleObject::DoVerb..................... 321 Шаг 2 — IQlelnPlaceObject...................... 330 Шаг 3 — Каркас IQlelnPlaceActivateObject..............331 Контекстно-зависимая справка.................• • 332 Кто мой родитель?................. .,.....'Ч3*2 Быстрые клавиши........................',.**2 Заключение.............. . ..............%$• Вопросы и ответы..........................• ч?3 Семинар...........................• • • • -834 Опрос........................• j^ ' • • • 384 Упражнения....... . ....................334 Ответы к опросу......................... . 334 Ответы к упражнениям........<. ..............334 День 16. Контейнеры OLE.................... . 335 Контейнер OLE............................ 335 Документы и местоположения.................... . 335 Контейнеры OLE шаг за шагом................... .337 Шаг 1 — Инициализация и деинициализация OLE...........337 Шаг 2 — Поддержка структурированного хранилища.........337 Шаг 3 — Добавление Insert Object.................. 340 Шаг 4 — Изображение объекта................... 351 Шаг 5 — Реализация lOleClientSite................. 352 Шаг 6 т- Реализация JAdviseSink..............'.... 354 Шаг 7 — Тестирование.......................355 Шаг 8 — Меню........... . .............. . 355 Заключение............... . .......-...., . . 357 Вопросы и ответы................... . : .......357 Семинар................................ 358 Опрос...............................358 Упражнения............................ 358 Ответы к опросу........................... 358 Ответы к упражнениям....................... . 358 День 17. Drag and Drop....................... 359 Контейнеры и буфер Clipboard..................... 359 Вставка.............................. 359 Специальная вставка........................364 Копирование............................365 Удаление объекта..........................370 Вырезка................... . .......... 370 Перенести-положить.......;..................370 IDropSource........................... .370 IDropTarget.......................... .'-.->.-372 Заключение........................... . /,, . 376 Вопросы и ответы............................,378 Семинар............................... ,378 Опрос.............................. .378 Упражнения . . . . . . . . . . ........... . . . . .... 378 Ответы к опросу . . ........................ . .378 Ответы к упражнениям............ , . . . . ... ... 379 День 18. Передача объектов, через автомат .'...... . . . . . . 381 Автомат с объектами......................... , 381 Объект приложения ........................ ,382 Объект документа....................... ; ;' .'385 Реализация............................ . ; 387 Заключение............................'. .388 Вопросы и ответы.......................... .389 Семинар................................ 389 Опрос.............................. . 389 Упражнения........................... .; 389 Ответы к опросу......................... .'389 Ответы к упражнениям.....................• . . 390 День 19. Коллекции и lEnumVARIANT................391 Коллекции..............................391 SafeArray............................... . 391 SafeArrayCreate...........................392 SafeArrayDestroy..........................393 SafeArrayCopy . . .........................393 SafeArrayGetElement...................'.-... .393 SafeArrayPutElement........................394 SafeArrayRedim...........................394 Методы lEnumVARIANT........................394 Next................................394 Skip................................395 Reset................................395 , Clone................................ 396 Методы и свойства коллекций.....................397 _NewEnum.............................397 ; 'Count.................................398 Add................................398 ; Item................................399 : Remove . . .............................401 •! Методы доступа к коллекциям и элементам-..............403 Visual Basic и коллекции.......................404 Заключение..............................405 j Вопросы и ответы.......................... . 405 Семинар ,...............................405 Опрос...............................405 Упражнения...........'.................405 Ответы к опросу..........................406 Ответы к упражнениям....................... 406; Дего, 20. Стандарт WOSA/XRT................... 407 Фондовый рынок.................. . .-...... . 407 Истоки WOSA/XRT.......................... 408; WOSA/XRT и механизм OLE..................... 408 Архитектура WOSA/XRT....................... 409i Автомат OLE............................. 410J Опрос (Polling)................... ......... 411 Уведомление............................412 Связывание............................. 413 Заключение .............................. 413 Вопросы и ответы........................... 414; Семинар................................ . 414, Опрос............................... 414if Ответы к опросу........................... 414 День 21. Автоматизация с обновлением в реальном ^ времени .... ..... ................. 415 Еще раз о серверах....................... . . •• 415; Еще раз о контейнерах........................ 415! Поддержка связывания в контейнерах................. 416 Insert Object............................ 416? _____________________^^____-^____ ^ ^»*1УУ» К*"*" " *" Paste Link (Вставка связи)......................419 Контейнер/сервер............................420 Модифицированный автомат............•..........421 Экспонирование IDataObject.....................422 Заключение . . •.............................422 Вопросы и ответы...........................422 Семинар ............................ .... 423 Опрос............................ . . . 423 Упражнения.................•...........423 Ответы к опросу..........................423 Ответы к упражнениям.......................423 Неделя 3. Заключительный обзор.................. 425 Дополнительные дни ' День 22. Распределенное OLE . . ..................439 Как работает распределенное OLE...................439 Вызов удаленной процедуры..................•. . . . 441 Посредник/заглушка.......................... 441 Проблемы распределенного OLE....................442 Заключение..............................443 Вопросы и ответы........................... 443 Семинар....... . ....................... .444 Опрос................................444 Ответы к опросу.......................... 444 День 23. Управляющие элементы OLE....... ........ 445 Управляющие элементы Visual Basic................... 445 Управляющие элементы OLE...................... 445 Интерфейсы управляющих элементов OLE............... 446 Зачем вам нужно создавать управляющие элементы OLE?....... 448 Заключение . . ............................ 449 Вопросы и ответы............................449 Приложение А............................451 Исходный текст OleGen................-. .'......451 Каталоги с файлами исходного кода................ . 452 Приложение Б. Интерфейс графических устройств (Быстрый взгляд на GDI).............. 455 Контекст устройства .......................... 455 Режимы отображения......................... 456 Текстовый режим отображения...................457 Английские режимы отображения..................457 Метрические режимы отображения................. 457 • Режимы отображения TWTPS....................457 Изотропные режимы отображения..................457 Анизотропные режимы отображения.................459 Режимы отображения и OLE.................... 459 Метафайлы...............................461 Создание метафайла....................; . . . . 461 Воспроизведение метафайла.................... . 461 Можно и нельзя для метафайлов...................461 Введение Научно-технический прогресс 90-х годов обусловил неуклонный рост популярности объектно-ориентированного программирования (ООП), и в настоящее время многие программисты перешли в своей работе на C++ или Visual Basic. Уже существуют объектно-ориентированные базы данных, объектно-ориентированные дизайн и анализ и даже объектно-ориентированный COBOL. На естественно возникающий вопрос — а не остались ли Windows или операционные системы в объектно-ориентированном отношении далеко позади — может быть только один ответ. Безусловно, нет. Продукт OLE (Object Linking and Embedding) компании Microsoft открывает новые пути, для применения' объектов в Windows и операционных системах (ходят слухи, что OLE положено в основу объектно-ориентированной операционной системы Cairo). Вам же, уважаемый читатель, необходимо изучить OLE, чтобы не отстать от жизни. Многим людям программирование для OLE представляется непреодолимой проблемой. Это неудивительно, если учесть, что уже существуют несколько сот новых функций API. Кроме того, OLE предполагает новый способ мышления. Программист в среде OLE должен мыслить обо всем как об объектах — от файла на диске, элемента данных или приложения до аппаратного обеспечения и операционной системы. Кроме того, OLE заставляет программиста следовать строгому, набору правил, не зависящих от языка программирования, операционной, системы или даже от аппаратной платформы. Предлагаемая книга — это введение в новый для вас мир. В течение 21 дня вы обучитесь правилам программирования в этой среде, если вы, конечно, знаете уже C++ и Windows. На самом деле, уже через несколько дней вы станете в состоянии переделать многие ваши существующие программы в приложения OLE. Эта книга полностью охватывает основы программирования OLE. Она представлена 21 разделом, каждый из которых рассчитан на один день обучения. Кроме того, два дополнительных раздела отражают будущее OLE-ориентированного программирования: распределенное OLE, включая реализацию на различных платформах, и OCX (органы управления OLE, подобные VBX из Visiual Basic). В каждом •разделе исследуется- новый аспект программирования OLE. Мы настоятельно рекомендуем читать книгу по порядку, поскольку понимание последующих разделов невозможно без изучения предыдущего материала. Каждая глава вводит новое понятие OLE и останавливается на наиболее частых вариантах ошибок, совершаемых программистами (в форме рекомендаций в рамках — как следует поступать и как не следует). Кроме того, вам предлагаются некоторые технические приемы, помогающие конвертировать существующие приложения в приложения OLE 2 с использованием библиотек классов C++ и с минимальными изменениями в уже существующих программах. Все разделы заканчиваются вопросами и .ответами, опросом и упражнениями, а в конце каждой недели вы сможете ознакомиться с обзором, который содержит полный список изученных понятий. Для получения максимальной отдачи от материала вам следует обращаться к представленным в книге листингам. Если вы знаете другой способ решения той же задачи, можете его испробовать. Эта книга написана не только для одного компилятора или библиотеки классов, поэтому ваша среда разработки может предоставить какие-то дополнительные способы реализации той или иной концепции. Чтобы была возможна проверка приложений, должны быть выполнены некоторые условия. А именно: Q Вы имеете практический опыт работы на C++. Примеры в этой книге были проверены на Visual C++ 1.5, Visual C++ 1.51 Visual C++ 2.0 и Borland C++ 4.0 для 16-битной среды. Все известные проблемы и способы их обхода указаны в соответствующих главах. Q Вы имеете практический опыт программирования в среде Windows. Примеры были проверены на различных 16-битных версиях Windows (таких, как Windows 3.1,. Windows 3.11 for Workgroups) и 32-битных Windows (таких, как Windows NT 3.5). Цена: 300руб. |
||||