COM-wrappers
COM verschilt van het .NET Runtime-objectmodel op verschillende belangrijke manieren:
Clients van COM-objecten moeten de levensduur van deze objecten beheren; de algemene taalruntime beheert de levensduur van objecten in de omgeving.
Clients van COM-objecten ontdekken of een service beschikbaar is door een interface aan te vragen die die service biedt en een interfaceaanwijzer terug te krijgen, of niet. Clients van .NET-objecten kunnen een beschrijving verkrijgen van de functionaliteit van een object met behulp van reflectie.
NET-objecten bevinden zich in het geheugen dat wordt beheerd door de .NET Runtime-uitvoeringsomgeving. De uitvoeringsomgeving kan objecten in het geheugen verplaatsen om prestatieredenen en alle verwijzingen naar de objecten die worden verplaatst bijwerken. Niet-beheerde clients die een aanwijzer naar een object hebben verkregen, vertrouwen op het object om op dezelfde locatie te blijven. Deze clients hebben geen mechanisme voor het omgaan met een object waarvan de locatie niet is opgelost.
Om deze verschillen te verhelpen, biedt de runtime wrapper-klassen om zowel beheerde als onbeheerde clients te laten denken dat ze objecten in hun respectieve omgeving aanroepen. Wanneer uw beheerde client een methode aanroept op een COM-object, maakt de runtime een runtime-aanroepbare wrapper (RCW). RCW's abstraheren onder andere de verschillen tussen beheerde en onbeheerde referentiemechanismen. De runtime maakt ook een COM callable wrapper (CCW) om het proces om te keren, waardoor een COM-client naadloos een methode voor een .NET-object kan aanroepen. Zoals in de volgende afbeelding wordt weergegeven, bepaalt het perspectief van de aanroepende code welke wrapperklasse de runtime maakt.
In de meeste gevallen biedt de standaard RCW of CCW die door de runtime wordt gegenereerd, voldoende marshalling voor aanroepen die de grens tussen COM en de .NET-runtime overschrijden. Met behulp van aangepaste kenmerken kunt u desgewenst de manier aanpassen waarop de runtime beheerde en onbeheerde code vertegenwoordigt.