Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Получен интерфейс объекта 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; просмотров: 388.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...