Поделиться через


Метод IObjectContext::CreateInstance (comsvcs.h)

Создает объект с использованием контекста текущего объекта.

Синтаксис

HRESULT CreateInstance(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Параметры

[in] rclsid

CLSID типа объекта для создания экземпляра.

[in] riid

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

[out] ppv

Ссылка на запрошенный интерфейс в новом объекте. Если создание экземпляра завершается сбоем, этому параметру присваивается значение NULL.

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

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

Код возврата Описание
S_OK
Метод завершился успешно.
REGDB_E_CLASSNOTREG
Компонент, указанный clsid, не зарегистрирован в качестве COM-компонента.
E_OUTOFMEMORY
Недостаточно памяти для создания экземпляра объекта.
E_INVALIDARG
Аргумент, передаваемый в параметре ppvObj , недопустим.
E_UNEXPECTED
Произошла непредвиденная ошибка. Это может произойти, если один объект передает свой указатель IObjectContext другому объекту, а другой объект вызывает CreateInstance с помощью этого указателя. Указатель IObjectContext недопустим вне контекста объекта, который его первоначально получил.

Комментарии

CreateInstance создает COM-объект. Однако объект будет иметь контекст только в том случае, если его компонент зарегистрирован с помощью COM+.

При создании объекта с помощью CreateInstance контекст нового объекта является производным от IObjectContext текущего объекта и декларативных свойств компонента нового объекта. Новый объект всегда выполняется в том же действии, что и созданный объект. Если текущий объект имеет транзакцию, атрибут транзакции компонента нового объекта определяет, выполняется ли новый объект в область этой транзакции.

Если параметр атрибута транзакции компонента либо требует транзакции, либо поддерживает транзакции, новый объект наследует транзакцию своего создателя. Если атрибут транзакции компонента требует новой транзакции, COM+ инициирует новую транзакцию для нового объекта. Если атрибут транзакции компонента не поддерживает транзакции, новый объект не выполняется ни в одной транзакции.

CreateInstance всегда возвращает интерфейс IUnknown для вновь созданного объекта. Необходимо немедленно привести возвращаемое значение к интерфейсу, через который требуется взаимодействовать с новым объектом. Идентификатор интерфейса, передаваемый в параметре riid , не обязательно должен быть тем же интерфейсом, к которому вы прививал возвращаемое значение, но это должен быть интерфейс, реализованный объектом, экземпляр которого вы создаете.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header comsvcs.h

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

IObjectContext