Cos'è COM? - Perché il design di Windows COM è ancora bello oggi

· Aggiornato il: · · COM, ActiveX, Sviluppo Windows

Cos’è COM?

COM (Component Object Model) è un “contratto binario” che permette ai componenti di comunicare su Windows. È un meccanismo per comunicare attraverso interfacce come contratti rigidi, superando le differenze tra linguaggi e compilatori, e al suo cuore sta la filosofia di design “programmare contro il contratto, non l’implementazione.”

I tre elementi chiave di COM

1. Design incentrato sulle interfacce

In COM, “il contratto viene prima dell’implementazione.” È possibile usare un oggetto senza sapere nulla della sua implementazione interna, purché si conoscano le sue interfacce pubblicate.

2. Identificazione tramite GUID (CLSID / IID)

A ogni componente e interfaccia viene assegnato un ID globalmente unico (GUID), quindi le collisioni di nomi non possono semplicemente verificarsi.

3. IUnknown

L’interfaccia base da cui eredita ogni interfaccia COM. Fornisce le seguenti tre funzioni.

Metodo Ruolo
QueryInterface Chiede se l’oggetto supporta un’altra interfaccia
AddRef Incrementa il conteggio dei riferimenti
Release Decrementa il conteggio dei riferimenti (l’oggetto si autodistrugge quando raggiunge 0)

I quattro punti di forza di COM

1. Compatibilità binaria

Una volta che un componente è costruito, può essere riutilizzato indipendentemente dal linguaggio di programmazione o dal runtime. Chiamare un componente COM scritto in C++ da C# o Python è del tutto normale.

2. Separazione dell’interfaccia

Poiché l’implementazione è completamente nascosta e viene pubblicato solo il contratto, l’implementazione interna può cambiare liberamente senza influenzare i chiamanti.

3. Coesistenza delle versioni

Il design standard per aggiungere funzionalità preservando la retrocompatibilità è aggiungere nuove interfacce. Nuove funzionalità possono essere fornite senza modificare le vecchie interfacce.

4. Riutilizzo oltre i confini di processo

Con COM out-of-proc (server EXE), è possibile chiamare funzionalità in sicurezza in un altro processo. Tuttavia, se il processo server va in crash, il chiamante vedrà errori come RPC_E_DISCONNECTED o RPC_S_SERVER_UNAVAILABLE, quindi è ancora richiesta la logica di ripristino per riavviare e riconnettersi.

COM è ancora in servizio attivo

Viene spesso liquidato come “tecnologia vecchia,” ma COM è un meccanismo che rimane oggi al cuore stesso di Windows.

Dove viene usato COM

  • Estensioni di Explorer (menu contestuali, preview handler)
  • Automazione di Office (controllare Excel e Word dall’esterno)
  • Interop con .NET (COM Interop)
  • Sistemi esistenti, inclusi ActiveX
  • DirectX, Windows Shell API e molte altre API di Windows

Anche se pensi “non c’entra nulla con me,” finché si sviluppa per Windows, COM apparirà da qualche parte.

Conclusione

Credo che la bellezza di COM risieda nella sua “indipendenza da linguaggio, processo e implementazione.” Design di interfaccia neutrale rispetto al linguaggio, identificazione univoca e versionamento tramite GUID, reference counting tramite IUnknown e un meccanismo che gestisce la comunicazione tra processi in modo trasparente. Ognuno di questi è un’idea universale che si trasporta direttamente nello sviluppo moderno orientato ai componenti (contratti REST API, separazione delle interfacce nei microservizi, e così via).

Articoli recenti con gli stessi tag per approfondire argomenti vicini.

Queste pagine collocano l’argomento in un contesto più ampio di servizi e decisioni.

L’articolo è direttamente collegato ai servizi seguenti.

Domande frequenti

Domande che ricorrono nelle consulenze sull’argomento dell’articolo.

Cos'è COM in Windows?
COM (Component Object Model) è un contratto binario che permette ai componenti di comunicare su Windows, superando le differenze di linguaggi e compilatori. I componenti comunicano attraverso interfacce che fungono da contratti rigidi, seguendo la filosofia di design di programmare contro il contratto anziché l'implementazione. Ogni componente e interfaccia è identificato da un GUID globalmente unico, quindi non possono verificarsi collisioni di nomi.
COM è ancora usato oggi?
Sì. COM rimane oggi al cuore stesso di Windows, anche se viene spesso liquidato come tecnologia vecchia. Alimenta estensioni di Explorer come menu contestuali e preview handler, automazione di Office, interoperabilità .NET tramite COM Interop, sistemi ActiveX esistenti e API Windows come DirectX e Windows Shell API. Finché si sviluppa per Windows, COM apparirà da qualche parte.
Cos'è l'interfaccia IUnknown e cosa fa?
IUnknown è l'interfaccia base da cui eredita ogni interfaccia COM. Fornisce tre funzioni: QueryInterface chiede se un oggetto supporta un'altra interfaccia, AddRef incrementa il conteggio dei riferimenti e Release lo decrementa. Quando il conteggio dei riferimenti raggiunge zero, l'oggetto si autodistrugge, ed è così che COM gestisce la durata degli oggetti.
Perché COM è considerato binariamente compatibile?
Una volta che un componente COM è stato costruito, può essere riutilizzato indipendentemente dal linguaggio di programmazione o runtime, quindi chiamare un componente COM scritto in C++ da C# o Python è del tutto normale. Poiché viene pubblicato solo il contratto dell'interfaccia e l'implementazione rimane nascosta, i dettagli interni possono cambiare liberamente senza influenzare i chiamanti. Nuove funzionalità vengono fornite aggiungendo nuove interfacce, il che preserva la retrocompatibilità per i chiamanti esistenti.

Profilo dell’autore

Pagina di presentazione dell’autore dell’articolo.

Go Komura

Rappresentante di KomuraSoft LLC

Specializzato nello sviluppo di software Windows, nella consulenza tecnica e nell’analisi dei malfunzionamenti, soprattutto nei progetti con sistemi esistenti e guasti difficili da riprodurre.

Torna al blog