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


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

Регистрирует объект класса EXE с помощью OLE, чтобы другие приложения могли подключиться к нему.

Синтаксис

HRESULT CoRegisterClassObject(
  [in]  REFCLSID  rclsid,
  [in]  LPUNKNOWN pUnk,
  [in]  DWORD     dwClsContext,
  [in]  DWORD     flags,
  [out] LPDWORD   lpdwRegister
);

Параметры

[in] rclsid

Идентификатор CLSID, который требуется зарегистрировать.

[in] pUnk

Указатель на интерфейс IUnknown в объекте класса, доступность которого публикуется.

[in] dwClsContext

Контекст, в котором выполняется исполняемый код. Сведения об этих значениях контекста см. в перечислении CLSCTX .

[in] flags

Указывает, как устанавливаются подключения к объекту класса. Сведения об этих флагах см. в перечислении REGCLS .

[out] lpdwRegister

Указатель на значение, определяющее зарегистрированный объект класса; позже используется функцией CoRevokeClassObject для отмены регистрации.

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

Эта функция может возвращать стандартные возвращаемые значения E_INVALIDARG, E_OUTOFMEMORY и E_UNEXPECTED, а также следующие значения.

Код возврата Описание
S_OK
Объект класса успешно зарегистрирован.

Комментарии

При запуске приложения объектов EXE должны вызывать CoRegisterClassObject . Его также можно использовать для регистрации внутренних объектов для использования в том же EXE-файле или другом коде (например, библиотеках DLL), который использует EXE. Только приложения объектов EXE вызывают CoRegisterClassObject. Обработчики объектов или приложения объектов DLL не вызывают эту функцию. Вместо этого они должны реализовать и экспортировать функцию DllGetClassObject .

При запуске многократно используемое приложение объекта EXE должно создать объект класса (с интерфейсом IClassFactory ) и вызвать CoRegisterClassObject , чтобы зарегистрировать объект класса. Объектные приложения, поддерживающие несколько разных классов (например, несколько типов встраиваемых объектов), должны выделять и регистрировать для каждого из них отдельный объект класса.

Несколько регистраций одного объекта класса являются независимыми и не создают ошибку. Каждая последующая регистрация дает уникальный ключ в lpdwRegister.

Несколько приложений интерфейса документов (MDI) должны регистрировать свои объекты класса. Приложения с одним интерфейсом документов (SDI) должны регистрировать свои объекты класса только в том случае, если их можно запустить с помощью параметра /Embedding .

Сервер для объекта класса должен вызвать CoRevokeClassObject , чтобы отозвать объект класса (удалить его регистрацию), если выполняются все следующие условия:

  • Экземпляры определения объекта отсутствуют.
  • Для объекта класса нет блокировок.
  • Приложение, предоставляющее службы для объекта класса, не находится под контролем пользователя (не отображается для пользователя на экране).
После отзыва объекта класса, когда его количество ссылок достигает нуля, объект класса можно освободить, что позволит приложению выйти. Обратите внимание, что CoRegisterClassObject вызывает IUnknown::AddRef , а CoRevokeClassObject вызывает IUnknown::Release, поэтому две функции образуют пару AddRef/Release .

В Windows Server 2003, если приложение com-объекта зарегистрировано в качестве службы, COM проверяет регистрацию. COM гарантирует, что идентификатор процесса службы в диспетчере управления службами (SCM) совпадает с идентификатором процесса регистрации. В противном случае COM не сможет выполнить регистрацию. Если приложение объекта COM выполняется в системной учетной записи без раздела реестра, COM обрабатывает удостоверение приложения объектов как запускающего пользователя.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

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

CLSCTX

CoGetClassObject

CoRevokeClassObject

Dllgetclassobject

REGCLS