Сущность технологии COM



Снова интерфейс и реализация - часть 5


Рис. 3.5. Активация с использованием Class Moniker

Рисунок 3.5 иллюстрирует, какие объекты создаются или находятся посредством каждой операции.

Visual Basic предоставляет функциональные возможности API-функции CoGetObject через встроенную функцию GetObject. Следующий код на Visual Basic также создает новую gorilla и предписывает ей есть бананы:

Sub CreateGorillaAndEatBanana() Dim gc as IApeClass Dim ape as IApe Dim sz as String sz = "clsid:571F1680-CC83-11d0-8C48-0080C73925BA:" ' get the class object for gorillas ' получаем объект класса для gorilla Set gc = GetObject(sz) ' ask Gorilla class object to create a new gorilla ' запрашиваем объект класса Gorilla создать новую gorilla Set ape = gc.CreateApe() ' ask gorilla to eat a banana ' просим gorilla есть бананы ape.EatBanana End Sub

Отметим, что версия этой функции на Visual Basic использует интерфейс IApeClass для обработки объекта. Это связано с тем, что Visual Basic не может использовать интерфейс IClassFactory из-за ограничений языка.

1

Хотя использование MkParseDisplayName будет несколько менее эффективным, оно обладает гораздо большей гибкостью. Как отмечалось ранее, отображаемое имя может быть прочитано из файла или даже из пользовательского интерфейса. Отличным примером такого приложения является Internet Explorer фирмы Microsoft, так как он позволяет пользователям набирать произвольные имена объектов (URL), которые превращаются в моникеры (с использованием расширенной API-функции MkParseDisplayNameEx).

2

Контексты связывания используются композитными моникерами для оптимизации операций синтаксического анализа и связывания. Кроме того, контексты связывания позволяют клиентам выставить флаги CLSCTX, а также COSERVERINFO, хотя текущая реализация Class Moniker проигнорирует оба эти атрибута. Вместо этого Class Moniker предполагает, что он будет скомпонован с тем моникером, который ссылается на реализацию интерфейса IClassActivator, допускающим намного большую гибкость.




Содержание  Назад  Вперед