Дональд Бокс - Сущность технологии СОМ. Библиотека программиста

Здесь есть возможность читать онлайн «Дональд Бокс - Сущность технологии СОМ. Библиотека программиста» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб, Год выпуска: 2001, ISBN: 2001, Издательство: Питер, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Сущность технологии СОМ. Библиотека программиста: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Сущность технологии СОМ. Библиотека программиста»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Сущность технологии СОМ. Библиотека программиста — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Сущность технологии СОМ. Библиотека программиста», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Sub UseCollie(fido as ICollie)

fido.HairCount = fido.HairCount – (fido.Age * 1000)

fido.CurrentThought = «I wish I had a bone»

End Sub

С++-отображение этого интерфейса просто прибавляет к именам методов конструкции put или get, чтобы подсказать программисту, что обращение относится к свойству:

void UseCollie(ICollie *pFido)

{

long n1, n2;

HRESULT hr = pFido->getHairCount(&n1);

assert(SUCCEEDED(hr));

hr = pFido->getAge(&n2);

assert(SUCCEEDED(hr));

hr = pFido->putHairCount(n1 – (n2 * 1000)): assert(SUCCEEDED(hr));

BSTR bstr = SysAllocString(OLESTR(«I wish I had a bone»));

hr = pFido->putCurrentThought(bstr);

assert(SUCCEEDED(hr));

SysFreeString(bstr);

}

Хотя свойства напрямую не обеспечивают развития, они полезны для выполнения точных преобразований на те языки, которые их поддерживают [1].

Исключения

СОМ имеет специфическую поддержку выбрасывания (throwing) исключительных ситуаций из реализации методов. Поскольку в языке C++ не существует двоичного стандарта для исключений, СОМ предлагает явные API-функции для выбрасывания и перехвата объектов СОМ-исключений:

// throw an exception

// возбуждаем исключения

HRESULT SetErrorInfo([in] ULONG reserved, //

m.b.z. [in] IErrorlnfo *pei);

// catch an exception

// перехватываем исключение

HRESULT GetErrorInfo([in] ULONG reserved, // m.b.z.

[out] IErrorInfo **ppei);

Процедура SetErrorInfo вызывается из реализации метода, чтобы связать объект исключения с текущим логическим потоком (logical thread) [1]. GetErrorInfo выбирает объект исключения из текущего логического потока и сбрасывает исключение, так что следующие вызовы GetErrorInfo возвратят SFALSE, показывая тем самым, что необработанных исключений нет. Как следует из приведенных ниже подпрограмм, объекты исключений должны поддерживать по крайней мере интерфейс IErrorInfo:

[ object, uuid(1CF2B120-547D-101B-8E65-08002B2BD119) ]

interface IErrorInfo: IUnknown

{

// get IID of interface that threw exception

// получаем IID того интерфейса, который возбудил исключение

HRESULT GetGUID([out] GUID * pGUID);

// get class name of object that threw exception

// получаем имя класса того объекта, который возбудил исключение

HRESULT GetSource([out] BSTR * pBstrSource);

// get human-readable description of exception

// получаем читабельное описание исключения

HRESULT GetDescription([out] BSTR * pBstrDescription);

// get WinHelp filename of documentation of error

// получаем имя файла WinHelp, содержащего документацию об ошибке

HRESULT GetHelpFile([out] BSTR * pBstrHelpFile);

// get WinHelp context ID for documentation of error

// получаем контекстный идентификатор WinHelp для документации ошибки

HRESULT GetHelpContext([out] DWORD * pdwHelpContext);

}

Специальные объекты исключений могут выбрать другие специфические для исключений интерфейсы в дополнение к IErrorInfo .

СОМ предусматривает по умолчанию реализацию IErrorInfo , которую можно создать с использованием API-функции СОМ CreateErrorInfo :

HRESULT CreateErrorInfo([out] ICreateErrorInfo **ppcei);

В дополнение к IErrorInfo объекты исключений по умолчанию открывают интерфейс ICreateErrorInfo , чтобы позволить пользователю инициализировать состояние нового исключения:

[ object, uuid(22F03340-547D-101B-8E65-08002B2BD119) ]

interface ICreateErrorInfo: IUnknown

{

// set IID of interface that threw exception

// устанавливаем IID интерфейс, который возбудил исключение

HRESULT SetGUID([in] REFGUID rGUID);

// set class name of object that threw exception

// устанавливаем классовое имя объекта, который возбудил исключение

HRESULT SetSource([in, string] OLECHAR* pwszSource);

// set human-readable description of exception

// устанавливаем читабельное описание исключения

HRESULT SetDescription([in, string] OLECHAR* pwszDesc);

// set WinHelp filename of documentation of error

// устанавливаем имя файла WinHelp, содержащего документацию об ошибке

HRESULT SetHelpFile([in, string] OLECHAR* pwszHelpFile);

// set WinHelp context ID for documentation of error

// устанавливаем идентификатор контекста WinHelp для документации ошибки

HRESULT SetHelpContext([in] DWORD dwHelpContext);

}

Заметим, что этот интерфейс просто позволяет пользователю заполнить объект исключения пятью основными атрибутами, доступными из интерфейса IErrorInfo .

Следующая реализация метода выбрасывает СОМ-исключение своему вызывающему объекту, используя объект исключений по умолчанию:

STDMETHODIMP PugCat::Snore(void)

{

if (this->IsAsleep())

// ok to perform operation?

// можно ли выполнять операцию?

return this->DoSnore();

//do operation and return

// выполняем операцию и возвращаемся

//otherwise create an exception object

// в противном случае создаем объект исключений

ICreateErrorInfo *рсеi = 0; HRESULT hr = CreateErrorInfo(&pcei);

assert(SUCCEEDED(hr));

// initialize the exception object

// инициализируем объект исключений

hr = pcei->SetGUID(II DIPug);

assert(SUCCEEDED(hr));

hr = pcei->SetSource(OLESTR(«PugCat»));

assert(SUCCEEDED(hr));

hr = pcei->SetDescription(OLESTR("I am not asleep !"));

assert(SUCCEEDED(hr));

hr = pcei->SetHelpFile(OLESTR(«C:\\PugCat.hlp»));

assert(SUCCEEDED(hr));

hr = pcei->SetHelpContext(5221);

assert(SUCCEEDED(hr));

// «throw» exception

// «выбрасываем» исключение

IErrorInfo *pei = 0;

hr = pcei->QueryInterface(II DIErrorInfo , (void**)&pei);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Сущность технологии СОМ. Библиотека программиста»

Представляем Вашему вниманию похожие книги на «Сущность технологии СОМ. Библиотека программиста» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Сущность технологии СОМ. Библиотека программиста»

Обсуждение, отзывы о книге «Сущность технологии СОМ. Библиотека программиста» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.