Лоуревс Харрис. Программирование 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).


Hosted by uCoz