Косвенно-вызываемые интерфейсы. Опрос объекта IMouseAction WhereYouClicked()

Презентация:



Advertisements
Похожие презентации
Фабрики Класса IDL. Создание компонента - 1 // // Функция создания // extern C IUnknown* CreateInstance() { IUnknown* pI = (IUnknown*)(void*)new CA; PI->AddRef();
Advertisements

Загруженная в оперативную память программа (ЕХЕ-файл) становится процессом. Процесс - это выполняемая программа, процесс имеет свою память, описатели.
COM в Visual FoxPro 6.0 (основные понятия) COM в Visual FoxPro ® 6.0 (основные понятия) Дроздов Михаил Компания «ИВС Софт» My Page: My Page:
Компоненты: Повторное применение; Использование..
§11 Переопределяйте clone() избирательно. interface Cloneable –Особенность Object.clone() –Уникальность интерфейса.
COM (Component Object Model) – модель многокомпонентных объектов.
1 ИССЛЕДОВАНИЕ ВОЗМОЖНОСТЕЙ COM- ТЕХНОЛОГИИ ДЛЯ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ ПРОГРАММНЫХ ПРОДУКТОВ Component Object Model Министерство образования и науки.
1. Понятие распределенной системы 2. Архитектура предприятия 3. Декомпозиция распределенных систем 4. Сетевой клиент 5. Сетевой сервер Вопросы.
Массивы в С#. Массивом называют упорядоченную последовательность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов.
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Интерфейсы Лекция 4. Реализуйте очередь в виде списка, содержащую комплексные числа Реализуйте методы void Enqueue(Complex с ) – помещает число в очередь.
ООП Классы Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Рис Схема формирования протокольного блока данных Уровни Блок данных N+1 уровня Блок данных N уровня Управляющая информация N+1 N.
:3 7*2 компоненты Результат =
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Обобщения ( шаблоны ) Лекция 5. Тип, метод или интерфейс параметризованный другим типом Обобщенный тип Тип ( класс, структура ), который параметризован.
Мне 8 лет
Схема 1 Схема 2 Схема 3 Схема 4.
Лабораторная работа 4. Подпрограммы. Задание на лабораторную работу Написать программу, реализующую хранение информации, указанной в вариантах индивидуальных.
Защита от взлома Лекция 10Защита от взлома Лекция 10.
Транксрипт:

Косвенно-вызываемые интерфейсы

Опрос объекта IMouseAction WhereYouClicked()

Косвенно-вызываемый интерфейс IIngoing IveBeenClicked() IMouseEvents [ptrIMouseEvents]

Схема двустороннего обмена 1) Клиент реализует свой интерфейс (sink object) 2) При создании компонента указатель передается Коклассу 3) При событии, происходит вызов методов исходящего интерфейса

Последовательность двустороннего обмена CreateInstance() Release() Advise(pSinkIface) UnAdvise() FireEvent()ISink IIngoing

Архитектура соединяемых объектов КлиентСервер CPTwo CPOne IConnectionPointContainer ISomeCustomInterface _IOutBound

IConnectionPointContainer interface IConnectionPointContainer : IUnknown { //задай мне перечисление всех объектов точек соединения HRESULT EnumConnectionPoints ( [out] IEnumConnectionPoints ** ppEnum ); //Есть у вас такая-то точка соединения? HRESULT FindConnectionPoint ( [in] REFIID riid, [out] IConnectionPoint ** ppCP ); }

IEnumConnectionPoints interface IEnumConnectionPoints : IUnknown { HRESULT Next( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT * ppCP, [out] ULONG * pcFetched ); HRESULT RemoteNext( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)]LPCONNECTIONPOINT * ppCP, [out] ULONG * pcFetched ); HRESULT Skip( [in] ULONG cConnections ); HRESULT Reset( void ); HRESULT Clone( [out] IEnumConnectionPoints ** ppEnum ); }

IConnectionPoint interface IConnectionPoint : IUnknown { //получить GUID данного интерфейса HRESULT GetConnectionInterface([out] IID * pIID); //Получить IID контейнера, содержащего точку соединения HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer ** ppCPC ); //Устанавливаем связь HRESULT Advise([in] IUnknown * pUnkSink,[out] DWORD * pdwCookie ); //Разъединяемся HRESULT Unadvise( [in] DWORD dwCookie ); //Какие еще клиенты подсоединены к этой точке? HRESULT EnumConnections( [out] IEnumConnections ** ppEnum ); }

IEnumConnections interface IEnumConnections : IUnknown { typedef struct tagCONNECTDATA { IUnknown * pUnk; DWORD dwCookie; } CONNECTDATA; HRESULT Next([in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd, [out] ULONG * pcFetched ); HRESULT RemoteNext([in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd, [out] ULONG * pcFetched); HRESULT Skip([in] ULONG cConnections); HRESULT Reset(void); HRESULT Clone([out] IEnumConnections ** ppEnum); }