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 |
---|---|
|
La libreria COM è stata inizializzata correttamente in questo thread. |
|
La libreria COM è già inizializzata in questo thread. |
|
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) |