Wrapper COMCOM Wrappers

COM è diverso dal modello a oggetti .NET Framework per diversi aspetti importanti:COM differs from the .NET Framework object model in several important ways:

  • I client di oggetti COM devono gestire la durata di tali oggetti. Common Language Runtime gestisce la durata degli oggetti nel proprio ambiente.Clients of COM objects must manage the lifetime of those objects; the common language runtime manages the lifetime of objects in its environment.

  • I client di oggetti COM individuano la disponibilità di un servizio inviando una richiesta a un'interfaccia che offre il servizio in questione e, se il servizio è disponibile, ricevendo un puntatore all'interfaccia.Clients of COM objects discover whether a service is available by requesting an interface that provides that service and getting back an interface pointer, or not. I client di oggetti .NET possono ottenere una descrizione della funzionalità di un oggetto tramite reflection.Clients of .NET objects can obtain a description of an object's functionality using reflection.

  • Gli oggetti .NET risiedono nella memoria gestita dall'ambiente di esecuzione di .NET Framework.NET objects reside in memory managed by the .NET Framework execution environment. L'ambiente di esecuzione può spostare gli oggetti in posizioni diverse all'interno della memoria per motivi di prestazioni e aggiornare tutti i riferimenti agli oggetti spostati.The execution environment can move objects around in memory for performance reasons and update all references to the objects it moves. I client non gestiti, dopo aver ottenuto un puntatore a un oggetto, per rimanere nella stessa posizione si basano sull'oggetto stesso.Unmanaged clients, having obtained a pointer to an object, rely on the object to remain at the same location. Questi client non hanno alcun meccanismo di gestione di oggetti il cui percorso non sia fisso.These clients have no mechanism for dealing with an object whose location is not fixed.

Per superare queste differenze, il runtime mette a disposizione classi wrapper. Tramite tali classi, sia ai client gestiti che ai client non gestiti le chiamate agli oggetti risultano eseguite all'interno dell'ambiente del client.To overcome these differences, the runtime provides wrapper classes to make both managed and unmanaged clients think they are calling objects within their respective environment. Ogni volta che il client gestito chiama un metodo per un oggetto COM, il runtime crea un Runtime Callable Wrapper (RCW).Whenever your managed client calls a method on a COM object, the runtime creates a runtime callable wrapper (RCW). Una delle funzioni degli RCW è nascondere le differenze tra meccanismi di riferimento gestiti e non gestiti.RCWs abstract the differences between managed and unmanaged reference mechanisms, among other things. Il runtime crea anche un COM Callable Wrapper (CCW) per invertire il processo, consentendo a un client COM di chiamare facilmente un metodo per un oggetto .NET.The runtime also creates a COM callable wrapper (CCW) to reverse the process, enabling a COM client to seamlessly call a method on a .NET object. Come illustrato nella figura seguente, la prospettiva del codice chiamante determina la classe wrapper creata dal runtime.As the following illustration shows, the perspective of the calling code determines which wrapper class the runtime creates.

Cenni preliminari sul wrapper COMCOM wrapper overview
Cenni preliminari sul wrapper COMCOM wrapper overview

Nella maggior parte dei casi, l'RCW o il CCW generato dal runtime effettua un marshalling adeguato per le chiamate che superano il limite tra COM e .NET Framework.In most cases, the standard RCW or CCW generated by the runtime provides adequate marshaling for calls that cross the boundary between COM and the .NET Framework. Usando attributi personalizzati, è possibile, facoltativamente, impostare il modo in cui il runtime rappresenta il codice gestito e non gestito.Using custom attributes, you can optionally adjust the way the runtime represents managed and unmanaged code.

Vedere ancheSee Also

Interoperabilità COM avanzataAdvanced COM Interoperability
Runtime Callable WrapperRuntime Callable Wrapper
COM Callable WrapperCOM Callable Wrapper
Personalizzazione di wrapper standardCustomizing Standard Wrappers
Procedura: Personalizzare Runtime Callable WrapperHow to: Customize Runtime Callable Wrappers