Share via


Función CoRegisterInitializeSpy (objbase.h)

Registra una implementación de la interfaz IInitializeSpy . La interfaz IInitializeSpy es desafiante para permitir a los desarrolladores realizar la inicialización y limpieza en apartamentos COM.

Sintaxis

HRESULT CoRegisterInitializeSpy(
  [in]  IInitializeSpy *pSpy,
  [out] ULARGE_INTEGER *puliCookie
);

Parámetros

[in] pSpy

Puntero a una instancia de la implementación de IInitializeSpy .

[out] puliCookie

Dirección en la que se va a almacenar una cookie que identifica este registro.

Valor devuelto

Esta función puede devolver el valor devuelto estándar E_INVALIDARG, así como los siguientes valores.

Código devuelto Descripción
S_OK
El objeto se registró correctamente.
E_NOINTERFACE
El objeto no admite IInitializeSpy.

Comentarios

La función CoRegisterInitializeSpy registra una implementación de la interfaz IInitializeSpy, que define los métodos a los que se llamará cuando se invoca CoInitializeEx (o CoInitialize) o CoUninitialize.

CoRegisterInitializeSpy llama a QueryInterface para IID_InitializeSpy en pSpy. Almacena la dirección del puntero de interfaz devuelto en el almacenamiento específico del subproceso que es independiente del estado de inicialización COM para este subproceso. Si se realiza correctamente, almacena en puliCookie una cookie ULARGE_INTEGER que representa este registro. Pase esta cookie a CoRevokeInitializeSpy para revocar el registro.

Las implementaciones de IInitializeSpy deben tratar los problemas de anidamiento causados por una llamada a CoInitializeEx o CoUninitialize desde dentro de un método de notificación. Las notificaciones solo se producen después de que se produzca el registro en este subproceso. Por ejemplo, si se llama a CoInitializeEx antes de CoRegisterInitializeSpy, no se llamará a los métodos de notificación PreInitialize y PostInitialize .

Los métodos de notificación no deben provocar el error de CoInitializeEx o CoUninitialize iniciando excepciones. Las implementaciones de IInitializeSpy no deben propagar excepciones al código que llama a CoInitializeEx o CoUninitializeize.

Es impredecible si una llamada a CoRegisterInitializeSpy desde dentro de una llamada al método IInitializeSpy será efectiva durante la llamada actual de nivel superior (no anidado) a CoInitializeEx o CoUninitializeIze. Una implementación registrada de IInitializeSpy siempre será eficaz para futuras llamadas de nivel superior a CoInitializeEx o CoUninitializeize.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP con SP1 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado objbase.h
Library Ole32.lib
Archivo DLL Ole32.dll

Consulte también

CoRevokeInitializeSpy

IInitializeSpy