Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
ТЕХНОЛОГИИ ДОСТ... 62956
Имитационное мо... 58313
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 13,091
новичок: avegraf
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Игра Sokoban на Delphi + Блок схемы
Компьютерный магазин на Turbo Pascal (База данных) + Пояснительная записка
Поиск пути в графе заданном списками инцедентности на Turbo Pascal

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Снова IUnknown



IUnknown не имеет реализации по умолчанию, которая являлась бы частью интерфейса системного вызова СОМ. Заголовочные файлы SDK не содержат базовых классов, макросов или шаблонов, предусматривающих реализации QueryInterface , AddRef и Release , которые должны использоваться во всех программах на С или C++. Вместо этого Спецификация СОМ ( Component Object Model Specification ) предоставляет очень точные правила относительно допущений, которые клиенты и объекты могут делать относительно этих трех методов. Этот набор правил формирует протокол IUnknown и позволяет каждому разработчику объекта преобразовать три указанных метода IUnknown во все, что имеет смысл для его или ее объекта.
В главе 2 представлены фактические С++-реализации трех упомянутых методов, но СОМ никоим образом не обязывает объекты использовать их. Все, что требует СОМ, – это чтобы каждая реализация придерживалась базовых правил IUnknown . Как это достигается, не имеет ни малейшего отношения к СОМ. Это делает СОМ совершенно ненавязчивой, так как эта модель не требует, чтобы объект делал системные вызовы, наследовал системным реализациям, а все, что от него требуется, – это объявлять совместимые с СОМ указатели vptr . На самом деле, как будет показано далее в этой главе, можно выставлять наследующие IUnknown указатели vptr из классов, которые не наследуют ни одному интерфейсу СОМ.
Правила IUnknown в совокупности определяют, что значит быть объектом СОМ. Чтобы понять правила IUnknown, полезно начать с конкретного примера. Рассмотрим следующую иерархию интерфейсов:
import «unknwn.idl»;
[object, uuid(CD538340-A56D-11d0-8C2F-0080C73925BA)]
interface IVehicle : IUnknown {
HRESULT GetMaxSpeed([out, retval] long *pMax); }
[object, uuid(CD53834l-A56D-11d0-8C2F-0080C73925BA)]
interface ICar : IVehicle {
HRESULT Brake(void); }
[object, uuid(CD538342-A56D-11d0-8C2F-0080C73925BA)]
interface IPlane : IVehicle {
HRESULT TakeOff(void); }
[object, uuid(CD538343-A56D-11d0-8C2F-0080C73925BA)]
interface IBoat : IVehicle {
HRESULT Sink(void); }



СОМ использует стандартную технологию для визуального представления объектов. Эта технология находится в рамках принципа СОМ отделения интерфейса от реализации и не раскрывает никаких деталей реализации объекта, кроме списка выставляемых им интерфейсов. Эта технология также визуально усиливает многие из правил IUnknown . Рисунок 4.1 показывает стандартное представление класса CarBoatPlane , который реализует все только что определенные интерфейсы. Заметим, что единственный вывод, который можно сделать из этого рисунка, таков: если не произойдет катастрофического сбоя, объекты CarBoatPlane будут выставлять пять интерфейсов: IBoat , IPlane , ICar , IVehicle и IUnknown .
Первое правило IUnknown , подлежащее исследованию, – это требование, чтобы QueryInterface был симметричным, транзитивным и рефлексивным ( Symmetric/Transitive/Reflexive ). Эти требования определяют отношения между всеми интерфейсными указателями объекта и начинают определять понятие идентификации ( identity ) объектов СОМ. Подобно всем правилам IUnknown , эти требования должны исполняться всегда, за исключением катастрофических сбоев , теми, кто хочет считаться действительным объектом СОМ.
Опубликовал Kest July 13 2009 14:22:27 · 0 Комментариев · 5877 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Drag&Drop
ИНТЕРНЕТ ПРОГРАММ...
PHP глазами хакера
DFileDeleter
Панель для реклам...
Email
ProLIB18
Encrypt Decrypt
AddPage [Исходник...
База Allsubmitter...
Ведение справочны...
MPTools
C# 2005 и платфор...
Atb
Exe in exe
Xrumer 4 Platinum...
CodeGear RAD Stud...
Программирование ...
Matrix2D
Панель статистики...

Топ загрузок
Приложение Клие... 100477
Delphi 7 Enterp... 87836
Converter AMR<-... 20082
GPSS World Stud... 13456
Borland C++Buil... 12048
Borland Delphi ... 8667
Turbo Pascal fo... 7048
Visual Studio 2... 5005
Калькулятор [Ис... 4905
FreeSMS v1.3.1 3545
Случайные статьи
Где купить кухню в...
Игровые автоматы о...
ЭЛЕМЕНТЫ ПРОЦЕДУРЫ...
К головоломке "зеб...
Реализация одноадр...
Под категориями ст...
ОПЕРАТОРЫ ОПИСАНИЯ...
10.5. Принципы
Выбор дверей
ВСТРОЕННЫЙ ПРЕДИКА...
Подсписок из списк...
Панель управления
Удостоверьтесь, чт...
Компоненты системы...
Создание поставщик...
Классы-оболочки вс...
РЕШЕНИЕ: ИСПОЛЬЗО...
Понятие "Класс" [C++]
Внешняя сортировка...
Шкафы-купе в Гомеле
В этой главеГруппо...
Моноблок Apple iMa...
Сеть с одним домен...
Термоядерный синтез
Invalid ordering o...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?