Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Получен интерфейс объекта CBeep
Звучим! 'BeepPrj.exe': Loaded 'C:\WINDOWS\system32\winsta.dll' 'BeepPrj.exe': Loaded 'C:\WINDOWS\system32\netapi32.dll' Объект уничтожен Любопытный факт: вызов функции Beep() API Windows провоцирует (или требует?) загрузки двух библиотек winsta.dll и netapi32.dll. Шаг 6. Добавление новых интерфейсов (к разработанному интерфейсу IBeep).Для реализации дополнительных интерфейсов необходимо проделать следующие шаги: · объявить новый (абстрактный) класс как производный от IUnknown; · сгенерировать для него идентификатор IID; · объявить конкретный класс как производный от всех поддерживаемых объектом СОМ интерфейсов.
Например:
Class IMedia : public IUnknown { public: // IMedia methods STDMETHOD(Play)() = 0; };
Теперь используем наследование и описываем класс конкретный:
Class CMedia : public IBeep, IMedia { /*…*/ }
Так как появился дополнительный интерфейс, необходимо изменить реализацию QueryInterface() так, чтобы он позволял получать любой из интерфейсов IBeep и IMedia. Пример реализации этого метода:
STDMETHODIMP CBeep::QueryInterface(REFIID iid, void** ppv) { if ((iid == IID_IUnknown) || (iid == IID_IBeep)) *ppv = (IBeep*) this; else if (iid == IID_IMedia) *ppv = (IMedia*) this; else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
Введение в COM технологии Основные понятия и определения COM (Component Object Model) – модель компонентных объектов Microsoft. Стандартный механизм, включающий интерфейсы, с помощью которых одни объекты предоставляют свои сервисы другим. Является основой многих объектных технологий, в том числе OLE и ActiveX. Другой перевод: многокомпонентная модель объектов. DCOM (Distributed Component Object Model) – распределенная модель компонентных объектов. Расширение модели COM фирмы Microsoft, ориентированное на поддержку и интеграцию распределенных объектных приложений, функционирующих в сети. COM представляет собой основанную на объектах клиент-серверную модель, разработанную Microsoft для обеспечения взаимодействия между компонентами программного обеспечения и приложениями. Microsoft расширила эту технологию добавлением элементов ActiveX, которые представляют результат развития технологий OLE и OCX. OCX (OLE Custom eXtension) – это программируемые компоненты-приложения с интерфейсом на базе OLE, позволяющим легко включать их в другие приложения. С 1996 года они стали называться ActiveX. Сейчас Microsoft предлагает использовать термин Active technologies вместо ActiveX, включая в новые технологии такие составляющие: · Active Documents (активные документы); · ActiveX (управляющие элементы); · Active Scripting controls; · Automation (автоматизация, прежде известная как OLE Automation).
Ключевым аспектом COM является то, что эта технология обеспечивает связь между клиентами и серверами посредством интерфейсов. Именно интерфейс предоставляет клиенту способ "узнать" у сервера, какие именно возможности он поддерживает на этапе выполнения. Для расширения возможностей сервера необходимо просто добавить новый интерфейс к существующим, что и является ключевым моментом в сопровождении и модификации ПО. Технология COM как спецификация и реализация COM является одновременно и спецификацией и реализацией. Спецификация COM определяет правила создания объектов и их взаимодействия, способ связи между объектами. В соответствии со спецификацией объекты COM могут быть написаны на различных языках, выполняться в адресном пространстве различных процессов и на разнообразных платформах. До тех пор, пока объекты полностью соответствуют спецификации, они могут взаимодействовать. Это позволяет объединять унаследованный код как компонент с новыми компонентами, разработанными в любом из объектно-ориентированных языков. COM как реализация представляет собой библиотеку (файлы OLE32.dll и OLEAut32.dll), которая предоставляет ряд основных служб, поддерживающих описанные спецификации. Библиотека COM содержит набор стандартных интерфейсов, определяющих основную функциональность объектов COM, и небольшой набор функций API, разработанных для целей создания и управления объектами COM. Интерфейсы объектов Delphi, как и язык Object Pascal, соответствуют COM спецификации. Реализация COM в Delphi называется DAX (Delphi ActiveX framework – базовая структура элементов ActiveX Delphi). Основная часть реализации этой структуры находится в модуле AxCtrls. Когда программист использует мастеров Delphi или объекты библиотеки VCL для разработки компонентов СОМ в своем приложении, он использует реализацию COM спецификаций. Кроме того, Delphi предоставляет ряд упаковщиков (wrapper) для таких служб COM, которые не реализуются непосредственно, например, активные документы (Active Documents). Эти упаковщики включены в модуль ComObj Аналогичным образом Microsoft Visual C++ предоставляет программисту для разработки СОМ объектов и клиентских приложений как средства библиотеки MFC (Microsoft Foundation Class), так и средства библиотеки ATL (Active Template Library). Составляющие приложений COM При разработке приложений, использующих технологию COM, употребляются структурные элементы, приведенные в табл.1. Таблица 1 |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 433. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |