Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
COM differisce dal modello a oggetti di runtime .NET in diversi modi importanti:
I client degli oggetti COM devono gestire la durata di tali oggetti; Common Language Runtime gestisce la durata degli oggetti nell'ambiente.
I client degli oggetti COM individuano se un servizio è disponibile richiedendo un'interfaccia che fornisce tale servizio e recuperando o meno un puntatore all'interfaccia. I client di oggetti .NET possono ottenere una descrizione delle funzionalità di un oggetto tramite reflection.
Gli oggetti NET risiedono nella memoria gestita dall'ambiente di esecuzione del runtime .NET. L'ambiente di esecuzione può spostare oggetti in memoria per motivi di prestazioni e aggiornare tutti i riferimenti agli oggetti spostati. I client non gestiti, dopo aver ottenuto un puntatore a un oggetto, si aspettano che l'oggetto rimanga nella stessa posizione. Questi client non dispongono di alcun meccanismo per gestire un oggetto la cui posizione non è fissa.
Per superare queste differenze, il runtime fornisce classi di wrapper affinché sia i client gestiti che quelli non gestiti pensino di chiamare oggetti all'interno del rispettivo ambiente. Ogni volta che il client gestito chiama un metodo su un oggetto COM, il runtime crea un wrapper chiamabile in fase di esecuzione (RCW). Le rcw astraggono le differenze tra meccanismi di riferimento gestiti e non gestiti, tra le altre cose. Il runtime crea anche un wrapper chiamabile COM (CCW) per invertire il processo, consentendo a un client COM di chiamare facilmente un metodo su un oggetto .NET. Come illustrato nella figura seguente, la prospettiva del codice chiamante determina la classe wrapper creata dal runtime.
Nella maggior parte dei casi, lo standard RCW o CCW generato dal runtime fornisce un marshalling adeguato per le chiamate che superano il limite tra COM e il runtime .NET. Usando attributi personalizzati, è possibile modificare facoltativamente il modo in cui il runtime rappresenta il codice gestito e non gestito.