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 |
---|---|
|
La biblioteca COM se inicializó correctamente en este subproceso. |
|
La biblioteca COM ya se ha inicializado en este subproceso. |
|
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) |