Compartir a través de


Función CoInitialize (objbase.h)

Inicializa la biblioteca COM en el subproceso actual e identifica el modelo de simultaneidad como un solo subproceso (STA).

Las nuevas aplicaciones deben llamar a CoInitializeEx en lugar de CoInitialize.

Si quiere usar el Windows Runtime, debe llamar a RoInitialize o Windows::Foundation::Initialize en su lugar.

Sintaxis

HRESULT CoInitialize(
  [in, optional] LPVOID pvReserved
);

Parámetros

[in, optional] pvReserved

Este parámetro está reservado y debe ser NULL.

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
La biblioteca COM se inicializó correctamente en este subproceso.
S_FALSE
La biblioteca COM ya se ha inicializado en este subproceso.
RPC_E_CHANGED_MODE
Una llamada anterior a CoInitializeEx especificó el modelo de simultaneidad para este subproceso como apartamento multiproceso (MTA). Esto también podría indicar que se ha producido un cambio de un apartamento de subproceso neutro a un solo subproceso.

Comentarios

Debe inicializar la biblioteca COM en un subproceso antes de llamar a cualquiera de las funciones de biblioteca excepto CoGetMalloc, para obtener un puntero al asignador estándar y las funciones de asignación de memoria.

Después de establecer el modelo de simultaneidad para un subproceso, no se puede cambiar. Se producirá un error en una llamada a CoInitialize en un apartamento que se inicializó previamente como multiproceso y devolverá RPC_E_CHANGED_MODE.

CoInitializeEx proporciona la misma funcionalidad que CoInitialize y también proporciona un parámetro para especificar explícitamente el modelo de simultaneidad del subproceso. CoInitialize llama a CoInitializeEx y especifica el modelo de simultaneidad como apartamento de un solo subproceso. Las aplicaciones desarrolladas hoy deben llamar a CoInitializeEx en lugar de CoInitialize.

Normalmente, la biblioteca COM se inicializa en un subproceso solo una vez. Las llamadas posteriores a CoInitialize o CoInitializeEx en el mismo subproceso se realizarán correctamente, siempre que no intenten cambiar el modelo de simultaneidad, pero devolverán S_FALSE. Para cerrar correctamente la biblioteca COM, cada llamada correcta a CoInitialize o CoInitializeEx, incluidas las que devuelven S_FALSE, deben equilibrarse mediante una llamada correspondiente a CoUninitialize. Sin embargo, el primer subproceso de la aplicación que llama a CoInitialize con 0 (o CoInitializeEx con COINIT_APARTMENTTHREADED) debe ser el último subproceso para llamar a CoUninitialize. De lo contrario, las llamadas posteriores a CoInitialize en sta producirán un error y la aplicación no funcionará.

Dado que no hay ninguna manera de controlar el orden en el que los servidores en proceso se cargan o descargan, no llame a CoInitialize, CoInitializeEx o CoUninitialize desde la función DllMain .

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado objbase.h
Library Ole32.lib
Archivo DLL Ole32.dll
Conjunto de API ext-ms-win-com-sta-l1-1-0 (introducido en Windows 10, versión 10.0.20166)

Consulte también

CoInitializeEx