Condividi tramite


Funzione CoInitialize (objbase.h)

Inizializza la libreria COM nel thread corrente e identifica il modello di concorrenza come appartamento a thread singolo (STA).

Le nuove applicazioni devono chiamare CoInitializeEx anziché CoInitialize .

Se si vuole usare la Windows Runtime, è necessario chiamare RoInitialize o Windows::Foundation::Initialize.

Sintassi

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

Parametri

[in, optional] pvReserved

Questo parametro è riservato e deve essere NULL.

Valore restituito

Questa funzione può restituire i valori restituiti standard E_INVALIDARG, E_OUTOFMEMORY e E_UNEXPECTED, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
La libreria COM è stata inizializzata correttamente in questo thread.
S_FALSE
La libreria COM è già inizializzata in questo thread.
RPC_E_CHANGED_MODE
Una chiamata precedente a CoInitializeEx ha specificato il modello di concorrenza per questo thread come appartamento multithread (MTA). Ciò potrebbe anche indicare che si è verificato un cambiamento da appartamento con thread neutrale a appartamento a thread singolo.

Commenti

È necessario inizializzare la libreria COM in un thread prima di chiamare una delle funzioni di libreria tranne CoGetMalloc, per ottenere un puntatore all'allocatore standard e alle funzioni di allocazione della memoria.

Dopo aver impostato il modello di concorrenza per un thread, non può essere modificato. Una chiamata a CoInitialize su un appartamento inizializzato in precedenza come multithreaded avrà esito negativo e restituirà RPC_E_CHANGED_MODE.

CoInitializeEx fornisce la stessa funzionalità di CoInitialize e fornisce anche un parametro per specificare in modo esplicito il modello di concorrenza del thread. CoInitialize chiama CoInitializeEx e specifica il modello di concorrenza come appartamento a thread singolo. Le applicazioni sviluppate oggi devono chiamare CoInitializeEx anziché CoInitialize.

In genere, la libreria COM viene inizializzata solo una volta in un thread. Le chiamate successive a CoInitialize o CoInitializeEx nello stesso thread avranno esito positivo, purché non tentino di modificare il modello di concorrenza, ma restituiranno S_FALSE. Per chiudere correttamente la libreria COM, ogni chiamata riuscita a CoInitialize o CoInitializeEx, incluse quelle che restituiscono S_FALSE, deve essere bilanciata da una chiamata corrispondente a CoUninitialize. Tuttavia, il primo thread nell'applicazione che chiama CoInitialize con 0 (o CoInitializeEx con COINIT_APARTMENTTHREADED) deve essere l'ultimo thread per chiamare CoUninitialize. In caso contrario, le chiamate successive a CoInitialize sulla STA avranno esito negativo e l'applicazione non funzionerà.

Poiché non è possibile controllare l'ordine in cui i server in-process vengono caricati o scaricati, non chiamare CoInitialize, CoInitializeEx o CoUninitialize dalla funzione DllMain.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione objbase.h
Libreria Ole32.lib
DLL Ole32.dll
Set di API ext-ms-win-com-sta-l1-1-0 (introdotta in Windows 10, versione 10.0.20166)

Vedi anche

CoInitializeEx