Condividi tramite


Libreria COM

Qualsiasi processo che utilizza COM deve inizializzare e annullare l'inizializzazione della libreria COM. Oltre a essere una specifica, COM implementa anche alcuni servizi importanti in questa libreria. Fornito come set di DLL ed EXE (principalmente Ole32.dll e Rpcss.exe) in Microsoft Windows, la libreria COM include quanto segue:

  • Numero ridotto di funzioni fondamentali che facilitano la creazione di applicazioni COM, sia client che server. Per i client, COM fornisce funzioni di base per la creazione di oggetti. Per i server, COM fornisce i mezzi per esporre i relativi oggetti.

  • Servizi localizzatori di implementazione tramite cui COM determina, da un identificatore di classe univoco (CLSID), che implementa tale classe e dove si trova il server. Questo servizio include il supporto per un livello di riferimento indiretto, in genere un registro di sistema, tra l'identità di una classe oggetto e il pacchetto dell'implementazione in modo che i client siano indipendenti dal pacchetto, che può cambiare in futuro.

  • Transparent remote procedure chiama quando un oggetto è in esecuzione in un server locale o remoto.

  • Un meccanismo standard per consentire a un'applicazione di controllare la modalità di allocazione della memoria all'interno del processo, in particolare la memoria che deve essere passata tra oggetti che collaborano in modo che possa essere liberata correttamente.

Per usare i servizi COM di base, tutti i thread COM di esecuzione nei client e nei server out-of-process devono chiamare la funzione CoInitialize o CoInitializeEx prima di chiamare qualsiasi altra funzione COM ad eccezione delle chiamate di allocazione della memoria. CoInitializeEx sostituisce l'altra funzione, aggiungendo un parametro che consente di specificare il modello di threading del thread: threading apartment o threaded libero. Una chiamata a CoInitialize imposta semplicemente il modello di threading su threading apartment.

Le applicazioni di documenti composti OLE chiamano la funzione OleInitialize, che chiama CoInitializeEx ed esegue anche alcune operazioni di inizializzazione necessarie per i documenti composti. Pertanto, i thread che chiamano OleInitialize non possono essere a thread libero. Per informazioni sul threading in client e server, vedere Processi, thread e appartamenti.

I server in-process non chiamano le funzioni di inizializzazione perché vengono caricate in un processo già eseguito. Di conseguenza, i server in-process devono impostare il modello di threading nel Registro di sistema nella chiave InprocServer32 . Per informazioni dettagliate sui problemi di threading nei server in-process, vedere Problemi di threading del server in-process.

È anche importante annullare l'inizializzazione della libreria. Per ogni chiamata a CoInitialize o CoInitializeEx, deve essere presente una chiamata corrispondente a CoUninitialize. Per ogni chiamata a OleInitialize, deve essere presente una chiamata corrispondente a OleUninitialize.

I server in-process possono presupporre che il processo in cui vengono caricati abbia già eseguito questi passaggi.

Component Object Model (COM)