Share via


Función CoRegisterClassObject (combaseapi.h)

Registra un objeto de clase EXE con OLE para que otras aplicaciones puedan conectarse a él.

Sintaxis

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

Parámetros

[in] rclsid

CLSID que se va a registrar.

[in] pUnk

Puntero a la interfaz IUnknown en el objeto de clase cuya disponibilidad se está publicando.

[in] dwClsContext

Contexto en el que se va a ejecutar el código ejecutable. Para obtener información sobre estos valores de contexto, vea la enumeración CLSCTX .

[in] flags

Indica cómo se realizan las conexiones al objeto de clase. Para obtener información sobre estas marcas, consulte la enumeración REGCLS .

[out] lpdwRegister

Puntero a un valor que identifica el objeto de clase registrado; más adelante lo usa la función CoRevokeClassObject para revocar el registro.

Valor devuelto

Esta función puede devolver los valores devueltos estándar E_INVALIDARG, E_OUTOFMEMORY y E_UNEXPECTED, así como los siguientes valores.

Código devuelto Descripción
S_OK
El objeto de clase se registró correctamente.

Comentarios

Las aplicaciones de objetos EXE deben llamar a CoRegisterClassObject al iniciarse. También se puede usar para registrar objetos internos para usarlos por el mismo EXE u otro código (como archivos DLL) que usa el EXE. Solo las aplicaciones de objetos EXE llaman a CoRegisterClassObject. Los controladores de objetos o las aplicaciones de objetos DLL no llaman a esta función; en su lugar, deben implementar y exportar la función DllGetClassObject .

En el inicio, una aplicación de objeto EXE de varios usos debe crear un objeto de clase (con la interfaz IClassFactory en él) y llamar a CoRegisterClassObject para registrar el objeto de clase. Las aplicaciones de objeto que admiten varias clases diferentes (como varios tipos de objetos incrustables) deben asignar y registrar un objeto de clase diferente para cada uno.

Varios registros del mismo objeto de clase son independientes y no producen un error. Cada registro subsiguiente produce una clave única en lpdwRegister.

Varias aplicaciones de interfaz de documento (MDI) deben registrar sus objetos de clase. Las aplicaciones de interfaz de documento único (SDI) solo deben registrar sus objetos de clase si se pueden iniciar mediante el modificador /Embedding .

El servidor de un objeto de clase debe llamar a CoRevokeClassObject para revocar el objeto de clase (quitar su registro) cuando se cumplen todas las siguientes condiciones:

  • No hay instancias existentes de la definición de objeto.
  • No hay bloqueos en el objeto de clase.
  • La aplicación que proporciona servicios al objeto de clase no está bajo control de usuario (no es visible para el usuario en la pantalla).
Una vez revocado el objeto de clase, cuando su recuento de referencias alcanza cero, se puede liberar el objeto de clase, lo que permite que la aplicación salga. Tenga en cuenta que CoRegisterClassObject llama a IUnknown::AddRef y CoRevokeClassObject llama a IUnknown::Release, por lo que las dos funciones forman un par AddRef/Release .

A partir de Windows Server 2003, si una aplicación de objeto COM está registrada como servicio, COM comprueba el registro. COM garantiza que el identificador de proceso del servicio, en el administrador de control de servicios (SCM), coincide con el identificador de proceso del proceso de registro. Si no es así, COM produce un error en el registro. Si la aplicación de objetos COM se ejecuta en la cuenta del sistema sin clave del Registro, COM trata la identidad de la aplicación de objetos como Iniciar usuario.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado combaseapi.h (incluya Objbase.h)
Library Ole32.lib
Archivo DLL Ole32.dll

Consulte también

CLSCTX

CoGetClassObject

CoRevokeClassObject

DllGetClassObject

REGCLS