
- •Оглавление
- •От автора
- •Введение
- •Преимущества использования компонентов
- •Адаптация приложений
- •Библиотеки компонентов
- •Распределенные компоненты
- •Требования к компонентам
- •Динамическая компоновка
- •Инкапсуляция
- •Заключительные замечания о компонентах
- •Повторное использование архитектур приложений
- •Соглашения о кодировании
- •Законченный пример
- •Взаимодействие в обход интерфейсов
- •Детали реализации
- •Теория интерфейсов, часть II
- •Интерфейсы не изменяются
- •Полиморфизм
- •Что за интерфейсом
- •Таблица виртуальных функций
- •Указатели vtbl и данные экземпляра
- •Множественные экземпляры
- •Разные классы, одинаковые vtbl
- •Запрос интерфейса
- •IUnknown
- •Получение указателя на IUnknown
- •Знакомство с QueryInterface
- •Использование QueryInterface
- •Реализация QueryInterface
- •А теперь все вместе
- •Правила и соглашения QueryInterface
- •Вы всегда получаете один и тот же IUnknown
- •Вы можете получить интерфейс снова, если смогли получить его раньше
- •Вы можете снова получить интерфейс, который у Вас уже есть
- •Вы всегда можете вернуться туда, откуда начали
- •Если Вы смогли попасть куда-то хоть откуда-нибудь, Вы можете попасть туда откуда угодно
- •QueryInterface определяет компонент
- •Вы не можете воспользоваться всеми знаниями сразу
- •Работа с новыми версиями компонентов
- •Когда нужно создавать новую версию
- •Имена версий интерфейсов
- •Неявные соглашения
- •Управление временем жизни
- •Подсчет ссылок
- •Подсчет ссылок на отдельные интерфейсы
- •Реализация AddRef и Release
- •Когда подсчитывать ссылки
- •Оптимизация подсчета ссылок
- •Правила подсчета ссылок
- •Амуниция пожарного, резюме
- •Создание компонента
- •Экспорт функции из DLL
- •Загрузка DLL
- •Разбиваем монолит
- •Тексты программ
- •Связки объектов
- •Негибкое связывание, резюме
- •HRESULT
- •Поиск HRESULT
- •Использование HRESULT
- •Определение собственных кодов ошибки
- •GUID
- •Зачем нужен GUID?
- •Объявление и определение GUID
- •Сравнение GUID
- •Передача GUID по ссылке
- •Реестр Windows
- •Организация Реестра
- •Редактор Реестра
- •Необходимый минимум
- •Другие детали Реестра
- •ProgID
- •Саморегистрация
- •Категории компонентов
- •OleView
- •Некоторые функции библиотеки COM
- •Инициализация библиотеки COM
- •Управление памятью
- •Преобразование строк в GUID
- •Резюме
- •CoCreateInstance
- •Прототип CoCreateInstance
- •Использование CoCreateInstance
- •Контекст класса
- •Листинг кода клиента
- •Но CoCreateInstance недостаточно гибка
- •Фабрики класса
- •Использование CoGetClassObject
- •IClassFactory
- •CoCreateInstance vs. CoGetClassObject
- •Фабрики класса инкапсулируют создание компонентов
- •Реализация фабрики класса
- •Использование DllGetClassObject
- •Общая картина
- •Листинг кода компонента
- •Последовательность выполнения
- •Регистрация компонента
- •Несколько компонентов в одной DLL
- •Повторное применение реализации фабрики класса
- •Выгрузка DLL
- •Использование DllCanUnloadNow
- •LockServer
- •Резюме
- •Включение и агрегирование
- •Включение
- •Агрегирование
- •Сравнение включения и агрегирования
- •Реализация включения
- •Расширение интерфейсов
- •Реализация агрегирования
- •Магия QueryInterface
- •Неверный IUnknown
- •Интерфейсы IUnknown для агрегирования
- •Создание внутреннего компонента
- •Законченный пример
- •Слепое агрегирование
- •Агрегирование и включение в реальном мире
- •Предоставление информации о внутреннем состоянии
- •Моделирование виртуальных функций
- •Резюме
- •Упрощения на клиентской стороне
- •Smart-указатели на интерфейсы
- •Классы-оболочки C++
- •Упрощения на серверной стороне
- •Базовый класс CUnknown
- •Базовый класс CFactory
- •Использование CUnknown и CFactory
- •Резюме
- •Разные процессы
- •Локальный вызов процедуры
- •Маршалинг
- •DLL заместителя/заглушки
- •Введение в IDL/MIDL
- •Примеры описаний интерфейсов на IDL
- •Компилятор MIDL
- •Реализация локального сервера
- •Работа примера программы
- •Нет точек входа
- •Запуск фабрик класса
- •Изменения в LockServer
- •Удаленный сервер
- •Что делает DCOMCNFG.EXE?
- •Но как это работает?
- •Другая информация DCOM
- •Резюме
- •Новый способ общения
- •Старый способ общения
- •Использование IDispatch
- •Параметры Invoke
- •Примеры
- •Тип VARIANT
- •Тип данных BSTR
- •Тип данных SAFEARRAY
- •Библиотеки типа
- •Создание библиотеки типа
- •Библиотеки типа в Реестре
- •Реализация IDispatch
- •Генерация исключений
- •Маршалинг
- •Что Вы хотите сделать сегодня?
- •Потоковые модели COM
- •Потоки Win32
- •Подразделение
- •Разделенные потоки
- •Свободные потоки
- •Маршалинг и синхронизация
- •Реализация модели разделенных потоков
- •Автоматический маршалинг
- •Ручной маршалинг
- •Настало время написать программу
- •Пример с разделенным потоком
- •Реализация модели свободных потоков
- •Пример со свободным потоком
- •Оптимизация маршалинга для свободных потоков
- •Информация о потоковой модели в Реестре
- •Резюме
- •Программа Tangram
- •Tangram в работе
- •Детали и составные части
- •Клиентский EXE-модуль
- •Компонент TangramModel
- •Компоненты TangramGdiVisual и TangramGLVisual
- •Компоненты TangramGdiWorld и TangramGLWorld
- •Что демонстрирует пример
- •Файлы IDL
- •Файл DLLDATA.C
- •Циклический подсчет ссылок
- •Не вызывайте AddRef
- •Используйте явное удаление
- •Используйте отдельный компонент
- •События и точки подключения
- •IEnumXXX

Основы
2-е издание, исправленное и переработанное
Дейл Роджерсон
Оглавление |
|
ОТ АВТОРА ........................................................................................................................................................................ |
9 |
ВВЕДЕНИЕ........................................................................................................................................................................ |
11 |
ПРЕДВАРИТЕЛЬНЫЕ ЗНАНИЯ ............................................................................................................................................ |
11 |
Программисты, не заинтересованные в Windows — добро пожаловать!........................................................... |
11 |
C++................................................................................................................................................................................... |
12 |
Только обычный С++ ................................................................................................................................................. |
12 |
ПРИМЕРЫ.......................................................................................................................................................................... |
12 |
Пример программы Tangram..................................................................................................................................... |
13 |
Стилистические соглашения .................................................................................................................................... |
13 |
ПОЧЕМУ ПОЯВИЛАСЬ ЭТА КНИГА?................................................................................................................................... |
13 |
ТЕХНИЧЕСКАЯ ПОДДЕРЖКА ............................................................................................................................................. |
14 |
1 ГЛАВА |
|
КОМПОНЕНТЫ............................................................................................................................................................... |
15 |
ПРЕИМУЩЕСТВА ИСПОЛЬЗОВАНИЯ КОМПОНЕНТОВ ........................................................................................................ |
16 |
Адаптация приложений............................................................................................................................................. |
16 |
Библиотеки компонентов.......................................................................................................................................... |
16 |
Распределенные компоненты.................................................................................................................................... |
17 |
ТРЕБОВАНИЯ К КОМПОНЕНТАМ ....................................................................................................................................... |
17 |
Динамическая компоновка......................................................................................................................................... |
17 |
Инкапсуляция .............................................................................................................................................................. |
17 |
COM................................................................................................................................................................................. |
19 |
Компоненты СОМ — это…......................................................................................................................................19 |
|
СОМ — это не….........................................................................................................................................................20 |
|
Библиотека СОМ........................................................................................................................................................ |
20 |
Стиль СОМ................................................................................................................................................................. |
20 |
СОМ дает больше, чем необходимо......................................................................................................................... |
20 |
ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ О КОМПОНЕНТАХ.......................................................................................................... |
21 |
2 ГЛАВА |
|
ИНТЕРФЕЙС.................................................................................................................................................................... |
23 |
ИНТЕРФЕЙСЫ — ЭТО ВСЕ ................................................................................................................................................ |
23 |
Повторное использование архитектур приложений.............................................................................................. |
23 |
Другие преимущества интерфейсов СОМ............................................................................................................... |
24 |
РЕАЛИЗАЦИЯ ИНТЕРФЕЙСА СОМ .................................................................................................................................... |
24 |
Соглашения о кодировании........................................................................................................................................ |
25 |
Законченный пример................................................................................................................................................... |
26 |
Взаимодействие в обход интерфейсов .................................................................................................................... |
28 |
Детали реализации..................................................................................................................................................... |
28 |
ТЕОРИЯ ИНТЕРФЕЙСОВ, ЧАСТЬ II ..................................................................................................................................... |
29 |
Интерфейсы не изменяются..................................................................................................................................... |
30 |
Полиморфизм.............................................................................................................................................................. |
30 |
ЧТО ЗА ИНТЕРФЕЙСОМ ..................................................................................................................................................... |
30 |
Таблица виртуальных функций ................................................................................................................................. |
30 |
Указатели vtbl и данные экземпляра ........................................................................................................................ |
31 |
Множественные экземпляры.................................................................................................................................... |
32 |
Разные классы, одинаковые vtbl................................................................................................................................ |
32 |
КИРПИЧИКИ СОМ, РЕЗЮМЕ............................................................................................................................................. |
34 |

4
3 ГЛАВА
QUERYINTERFACE........................................................................................................................................................ |
35 |
ЗАПРОС ИНТЕРФЕЙСА....................................................................................................................................................... |
36 |
IUnknown..................................................................................................................................................................... |
36 |
Получение указателя на IUnknown........................................................................................................................... |
36 |
Знакомство с QueryInterface..................................................................................................................................... |
37 |
Использование QueryInterface ................................................................................................................................... |
37 |
Реализация QueryInterface ......................................................................................................................................... |
37 |
А теперь все вместе .................................................................................................................................................. |
40 |
ПРАВИЛА И СОГЛАШЕНИЯ QUERYINTERFACE................................................................................................................... |
43 |
Вы всегда получаете один и тот же IUnknown ..................................................................................................... |
44 |
Вы можете получить интерфейс снова, если смогли получить его раньше....................................................... |
44 |
Вы можете снова получить интерфейс, который у Вас уже есть..................................................................... |
44 |
Вы всегда можете вернуться туда, откуда начали.............................................................................................. |
45 |
Если Вы смогли попасть куда-то хоть откуда-нибудь, Вы можете попасть туда откуда угодно................ |
45 |
QUERYINTERFACE ОПРЕДЕЛЯЕТ КОМПОНЕНТ ................................................................................................................... |
46 |
Вы не можете воспользоваться всеми знаниями сразу......................................................................................... |
46 |
РАБОТА С НОВЫМИ ВЕРСИЯМИ КОМПОНЕНТОВ............................................................................................................... |
46 |
Когда нужно создавать новую версию.................................................................................................................... |
47 |
Имена версий интерфейсов....................................................................................................................................... |
48 |
Неявные соглашения .................................................................................................................................................. |
48 |
«У ВАС ДВЕ НОГИ?» ........................................................................................................................................................ |
48 |
4 ГЛАВА |
|
ПОДСЧЕТ ССЫЛОК...................................................................................................................................................... |
51 |
УПРАВЛЕНИЕ ВРЕМЕНЕМ ЖИЗНИ ..................................................................................................................................... |
51 |
ПОДСЧЕТ ССЫЛОК............................................................................................................................................................ |
52 |
Подсчет ссылок на отдельные интерфейсы........................................................................................................... |
53 |
Реализация AddRef и Release ..................................................................................................................................... |
54 |
КОГДА ПОДСЧИТЫВАТЬ ССЫЛКИ..................................................................................................................................... |
59 |
Оптимизация подсчета ссылок................................................................................................................................ |
59 |
Правила подсчета ссылок ......................................................................................................................................... |
61 |
АМУНИЦИЯ ПОЖАРНОГО, РЕЗЮМЕ.................................................................................................................................. |
62 |
5 ГЛАВА |
|
ДИНАМИЧЕСКАЯ КОМПОНОВКА .......................................................................................................................... |
65 |
СОЗДАНИЕ КОМПОНЕНТА................................................................................................................................................. |
65 |
Экспорт функции из DLL .......................................................................................................................................... |
65 |
Загрузка DLL............................................................................................................................................................... |
67 |
РАЗБИВАЕМ МОНОЛИТ ..................................................................................................................................................... |
68 |
Тексты программ....................................................................................................................................................... |
69 |
СВЯЗКИ ОБЪЕКТОВ ........................................................................................................................................................... |
72 |
НЕГИБКОЕ СВЯЗЫВАНИЕ, РЕЗЮМЕ................................................................................................................................... |
73 |
6 ГЛАВА |
|
HRESULT, GUID, РЕЕСТР И ДРУГИЕ ДЕТАЛИ .................................................................................................... |
75 |
HRESULT........................................................................................................................................................................ |
75 |
Поиск HRESULT ......................................................................................................................................................... |
77 |
Использование HRESULT .......................................................................................................................................... |
78 |
Определение собственных кодов ошибки ................................................................................................................ |
79 |
GUID................................................................................................................................................................................ |
80 |
Зачем нужен GUID? .................................................................................................................................................. |
80 |
Объявление и определение GUID .............................................................................................................................. |
81 |
Сравнение GUID......................................................................................................................................................... |
82 |
Использование GUID в качестве идентификаторов компонентов...................................................................... |
82 |
Передача GUID по ссылке......................................................................................................................................... |
82 |
РЕЕСТР WINDOWS ............................................................................................................................................................ |
82 |
Организация Реестра ................................................................................................................................................ |
82 |
Редактор Реестра ..................................................................................................................................................... |
82 |
Необходимый минимум.............................................................................................................................................. |
83 |

|
5 |
Другие детали Реестра ............................................................................................................................................. |
83 |
ProgID.......................................................................................................................................................................... |
84 |
Саморегистрация....................................................................................................................................................... |
85 |
Категории компонентов ........................................................................................................................................... |
86 |
OleView ........................................................................................................................................................................ |
87 |
НЕКОТОРЫЕ ФУНКЦИИ БИБЛИОТЕКИ COM ..................................................................................................................... |
87 |
Инициализация библиотеки COM ............................................................................................................................. |
87 |
Управление памятью ................................................................................................................................................. |
88 |
Преобразование строк в GUID ................................................................................................................................. |
88 |
РЕЗЮМЕ ............................................................................................................................................................................ |
89 |
7 ГЛАВА |
|
ФАБРИКА КЛАССА ....................................................................................................................................................... |
91 |
COCREATEINSTANCE.......................................................................................................................................................... |
91 |
Прототип CoCreateInstance ..................................................................................................................................... |
91 |
Использование CoCreateInstance............................................................................................................................... |
92 |
Контекст класса ........................................................................................................................................................ |
92 |
Листинг кода клиента ............................................................................................................................................... |
93 |
Но CoCreateInstance недостаточно гибка............................................................................................................... |
94 |
ФАБРИКИ КЛАССА ............................................................................................................................................................ |
94 |
Использование CoGetClassObject.............................................................................................................................. |
95 |
IClassFactory ............................................................................................................................................................... |
95 |
CoCreateInstance vs. CoGetClassObject..................................................................................................................... |
96 |
Фабрики класса инкапсулируют создание компонентов........................................................................................ |
96 |
РЕАЛИЗАЦИЯ ФАБРИКИ КЛАССА....................................................................................................................................... |
97 |
Использование DllGetClassObject.............................................................................................................................. |
97 |
Общая картина........................................................................................................................................................... |
97 |
Листинг кода компонента ........................................................................................................................................ |
98 |
Последовательность выполнения........................................................................................................................... |
103 |
Регистрация компонента........................................................................................................................................ |
103 |
НЕСКОЛЬКО КОМПОНЕНТОВ В ОДНОЙ DLL ................................................................................................................... |
104 |
Повторное применение реализации фабрики класса ............................................................................................ |
104 |
ВЫГРУЗКА DLL .............................................................................................................................................................. |
105 |
Использование DllCanUnloadNow........................................................................................................................... |
105 |
LockServer.................................................................................................................................................................. |
105 |
РЕЗЮМЕ .......................................................................................................................................................................... |
106 |
8 ГЛАВА |
|
ПОВТОРНАЯ ПРИМЕНИМОСТЬ КОМПОНЕНТОВ: ВКЛЮЧЕНИЕ И АГРЕГИРОВАНИЕ ................... |
107 |
ВКЛЮЧЕНИЕ И АГРЕГИРОВАНИЕ .................................................................................................................................... |
108 |
Включение.................................................................................................................................................................. |
108 |
Агрегирование ........................................................................................................................................................... |
108 |
Сравнение включения и агрегирования ................................................................................................................... |
109 |
РЕАЛИЗАЦИЯ ВКЛЮЧЕНИЯ ............................................................................................................................................. |
109 |
Расширение интерфейсов........................................................................................................................................ |
111 |
РЕАЛИЗАЦИЯ АГРЕГИРОВАНИЯ ...................................................................................................................................... |
112 |
Магия QueryInterface................................................................................................................................................ |
113 |
Неверный IUnknown.................................................................................................................................................. |
114 |
Интерфейсы IUnknown для агрегирования............................................................................................................ |
115 |
Создание внутреннего компонента........................................................................................................................ |
117 |
Указатели внешнего компонента на интерфейсы внутреннего компонента ................................................... |
119 |
ЗАКОНЧЕННЫЙ ПРИМЕР.................................................................................................................................................. |
121 |
Слепое агрегирование............................................................................................................................................... |
131 |
АГРЕГИРОВАНИЕ И ВКЛЮЧЕНИЕ В РЕАЛЬНОМ МИРЕ...................................................................................................... |
133 |
Предоставление информации о внутреннем состоянии...................................................................................... |
133 |
Моделирование виртуальных функций................................................................................................................... |
134 |
РЕЗЮМЕ .......................................................................................................................................................................... |
135 |
9 ГЛАВА |
|
БУДЕМ ПРОЩЕ............................................................................................................................................................. |
137 |
УПРОЩЕНИЯ НА КЛИЕНТСКОЙ СТОРОНЕ........................................................................................................................ |
137 |
6
|
Smart-указатели на интерфейсы............................................................................................................................ |
137 |
Классы-оболочки C++ ............................................................................................................................................. |
145 |
|
УПРОЩЕНИЯ НА СЕРВЕРНОЙ СТОРОНЕ .......................................................................................................................... |
146 |
|
Базовый класс CUnknown ........................................................................................................................................ |
146 |
|
Базовый класс CFactory........................................................................................................................................... |
149 |
|
Использование CUnknown и CFactory .................................................................................................................... |
152 |
|
Все вместе, шаг за шагом ....................................................................................................................................... |
156 |
|
РЕЗЮМЕ.......................................................................................................................................................................... |
157 |
|
10 ГЛАВА |
|
|
СЕРВЕРЫ В EXE ........................................................................................................................................................... |
159 |
|
РАЗНЫЕ ПРОЦЕССЫ........................................................................................................................................................ |
159 |
|
Локальный вызов процедуры................................................................................................................................... |
160 |
|
Маршалинг................................................................................................................................................................ |
160 |
|
DLL заместителя/заглушки .................................................................................................................................... |
161 |
|
ВВЕДЕНИЕ В IDL/MIDL................................................................................................................................................. |
161 |
|
IDL ............................................................................................................................................................................. |
162 |
|
Примеры описаний интерфейсов на IDL ............................................................................................................... |
162 |
|
Компилятор MIDL ................................................................................................................................................... |
166 |
|
РЕАЛИЗАЦИЯ ЛОКАЛЬНОГО СЕРВЕРА............................................................................................................................. |
168 |
|
Работа примера программы................................................................................................................................... |
169 |
|
Нет точек входа ...................................................................................................................................................... |
169 |
|
Запуск фабрик класса .............................................................................................................................................. |
169 |
|
Изменения в LockServer ........................................................................................................................................... |
172 |
|
УДАЛЕННЫЙ СЕРВЕР ...................................................................................................................................................... |
173 |
|
Что делает DCOMCNFG.EXE? ............................................................................................................................. |
174 |
|
Но как это работает?............................................................................................................................................ |
174 |
|
Другая информация DCOM ..................................................................................................................................... |
175 |
|
РЕЗЮМЕ.......................................................................................................................................................................... |
177 |
|
11 ГЛАВА |
|
|
ДИСПЕТЧЕРСКИЕ ИНТЕРФЕЙСЫ И АВТОМАТИЗАЦИЯ ............................................................................ |
179 |
|
НОВЫЙ СПОСОБ ОБЩЕНИЯ............................................................................................................................................. |
179 |
|
Старый способ общения ......................................................................................................................................... |
180 |
|
IDispatch, или «Я диспетчер, ты диспетчер…».................................................................................................... |
180 |
|
ИСПОЛЬЗОВАНИЕ IDISPATCH ......................................................................................................................................... |
183 |
|
Параметры Invoke ................................................................................................................................................... |
184 |
|
Примеры.................................................................................................................................................................... |
187 |
|
Тип VARIANT ............................................................................................................................................................ |
188 |
|
Тип данных BSTR...................................................................................................................................................... |
190 |
|
Тип данных SAFEARRAY.......................................................................................................................................... |
190 |
|
БИБЛИОТЕКИ ТИПА ........................................................................................................................................................ |
191 |
|
Создание библиотеки типа..................................................................................................................................... |
191 |
|
Использование библиотек типа ............................................................................................................................. |
193 |
|
Библиотеки типа в Реестре ................................................................................................................................... |
194 |
|
РЕАЛИЗАЦИЯ IDISPATCH ................................................................................................................................................ |
194 |
|
Генерация исключений ............................................................................................................................................. |
196 |
|
Маршалинг................................................................................................................................................................ |
196 |
|
ЧТО ВЫ ХОТИТЕ СДЕЛАТЬ СЕГОДНЯ? ............................................................................................................................ |
197 |
|
12 ГЛАВА |
|
|
МНОГОПОТОЧНОСТЬ............................................................................................................................................... |
199 |
|
ПОТОКОВЫЕ МОДЕЛИ COM........................................................................................................................................... |
199 |
|
Потоки Win32........................................................................................................................................................... |
199 |
|
Потоки СОМ ............................................................................................................................................................ |
200 |
|
Подразделение .......................................................................................................................................................... |
200 |
|
Разделенные потоки ................................................................................................................................................ |
202 |
|
Свободные потоки ................................................................................................................................................... |
202 |
|
Маршалинг и синхронизация ................................................................................................................................... |
203 |
|
РЕАЛИЗАЦИЯ МОДЕЛИ РАЗДЕЛЕННЫХ ПОТОКОВ ........................................................................................................... |
204 |
|
Автоматический маршалинг .................................................................................................................................. |
205 |

|
7 |
Ручной маршалинг .................................................................................................................................................... |
205 |
Настало время написать программу ..................................................................................................................... |
206 |
Пример с разделенным потоком............................................................................................................................. |
206 |
РЕАЛИЗАЦИЯ МОДЕЛИ СВОБОДНЫХ ПОТОКОВ............................................................................................................... |
211 |
Пример со свободным потоком .............................................................................................................................. |
212 |
Оптимизация маршалинга для свободных потоков.............................................................................................. |
215 |
ИНФОРМАЦИЯ О ПОТОКОВОЙ МОДЕЛИ В РЕЕСТРЕ ........................................................................................................ |
216 |
РЕЗЮМЕ .......................................................................................................................................................................... |
217 |
13 ГЛАВА |
|
СЛОЖИМ ВСЕ ВМЕСТЕ............................................................................................................................................. |
219 |
ПРОГРАММА TANGRAM.................................................................................................................................................. |
220 |
Tangram в работе..................................................................................................................................................... |
220 |
Детали и составные части..................................................................................................................................... |
220 |
Клиентский EXE-модуль.......................................................................................................................................... |
221 |
Компонент TangramModel ...................................................................................................................................... |
221 |
Компоненты TangramGdiVisual и TangramGLVisual ............................................................................................ |
222 |
Компоненты TangramGdiWorld и TangramGLWorld ............................................................................................ |
222 |
ЧТО ДЕМОНСТРИРУЕТ ПРИМЕР ....................................................................................................................................... |
223 |
ФАЙЛЫ IDL.................................................................................................................................................................... |
223 |
Файл DLLDATA.C ..................................................................................................................................................... |
224 |
ЦИКЛИЧЕСКИЙ ПОДСЧЕТ ССЫЛОК ................................................................................................................................. |
224 |
Не вызывайте AddRef............................................................................................................................................... |
224 |
Используйте явное удаление.................................................................................................................................... |
225 |
Используйте отдельный компонент ...................................................................................................................... |
225 |
СОБЫТИЯ И ТОЧКИ ПОДКЛЮЧЕНИЯ................................................................................................................................ |
226 |
IEnumXXX.................................................................................................................................................................. |
227 |
ОСНОВА COM — СТАНДАРТНЫЕ ИНТЕРФЕЙСЫ............................................................................................................ |
228 |
У-У-Ф! ............................................................................................................................................................................ |
228 |