Функция CoGetDefaultContext (combaseapi.h)

Извлекает ссылку на контекст по умолчанию указанного объекта.

Синтаксис

HRESULT CoGetDefaultContext(
  [in]  APTTYPE aptType,
  [in]  REFIID  riid,
  [out] void    **ppv
);

Параметры

[in] aptType

Тип квартиры контекста по умолчанию, который запрашивается. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
APTTYPE_CURRENT
-1
Квартира звонящего.
APTTYPE_MTA
1
Многопоточные квартиры для текущего процесса.
APTTYPE_NA
2
Нейтральная квартира для текущего процесса.
APTTYPE_MAINSTA
3
Main однопотоковый объект для текущего процесса.
 

Значение APTTYPE APTTYPE_STA (0) не поддерживается. Процесс может содержать несколько однопоточных квартир, каждый из которых имеет собственный контекст, поэтому CoGetDefaultContext не может определить, какой sta представляет интерес. Таким образом, эта функция возвращает E_INVALIDARG, если указан APTTYPE_STA.

[in] riid

Идентификатор интерфейса (IID) интерфейса, запрашиваемого в контексте по умолчанию. Как правило, вызывающий объект запрашивает IID_IObjectContext. Контекст по умолчанию не поддерживает все интерфейсы контекста обычных объектов.

[out] ppv

Ссылка на интерфейс, заданный riid в контексте по умолчанию. Если компонент объекта не настроен (то есть компонент объекта не импортирован в приложение COM+) или если функция CoGetDefaultContext вызывается из конструктора или метода IUnknown , этому параметру присваивается указатель NULL .

Возвращаемое значение

Этот метод может возвращать следующие значения.

Код возврата Описание
S_OK
Метод завершился успешно.
E_INVALIDARG
Один из параметров недопустим.
CO_E_NOTINITIALIZED
Вызывающий объект не находится в инициализированной квартире.
E_NOINTERFACE
Контекст объекта не поддерживает интерфейс, заданный riid.

Комментарии

Каждый com-объект имеет особый контекст, который называется контекстом по умолчанию. Контекст по умолчанию отличается от всех других контекстов, отличных от контекстов по умолчанию в квартире, так как он не предоставляет службы среды выполнения. Он не поддерживает все интерфейсы контекста обычных объектов.

Контекст по умолчанию также используется экземплярами ненастроенных com-компонентов (т. е. компонентов, которые не были частью приложения COM+), когда они создаются из объекта, который не поддерживает их потоковую модель. Иными словами, если COM-объект создает экземпляр ненастроенного компонента и новый объект не может быть добавлен в контекст его создателя из-за его потоковой модели, новый объект добавляется в контекст по умолчанию объекта, поддерживающего его потоковую модель.

Объект никогда не должен передавать ссылку IObjectContext другому объекту. Если передать ссылку IObjectContext другому объекту, она больше не будет допустимой.

Когда объект получает ссылку на IObjectContext, он должен освободить объект IObjectContext после завершения работы с ним.

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header combaseapi.h
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

Контексты и модели потоков COM+