Partilhar via


Invólucros COM

COM difere do modelo de objeto de tempo de execução do .NET de várias maneiras importantes:

  • Os clientes de objetos COM devem gerenciar o tempo de vida desses objetos; O Common Language Runtime gerencia o tempo de vida dos objetos em seu ambiente.

  • Os clientes de objetos COM descobrem se um serviço está disponível solicitando uma interface que fornece esse serviço e recuperando um ponteiro de interface, ou não. Os clientes de objetos .NET podem obter uma descrição da funcionalidade de um objeto usando reflexão.

  • NET residem na memória gerenciada pelo ambiente de execução de tempo de execução do .NET. O ambiente de execução pode mover objetos na memória por motivos de desempenho e atualizar todas as referências aos objetos que move. Clientes não gerenciados, tendo obtido um ponteiro para um objeto, dependem do objeto para permanecer no mesmo local. Esses clientes não têm nenhum mecanismo para lidar com um objeto cuja localização não é fixa.

Para superar essas diferenças, o tempo de execução fornece classes wrapper para fazer com que clientes gerenciados e não gerenciados pensem que estão chamando objetos em seu respetivo ambiente. Sempre que seu cliente gerenciado chama um método em um objeto COM, o tempo de execução cria um wrapper chamável de tempo de execução (RCW). Os RCWs abstraem as diferenças entre mecanismos de referência gerenciados e não gerenciados, entre outras coisas. O tempo de execução também cria um wrapper chamável COM (CCW) para reverter o processo, permitindo que um cliente COM chame diretamente um método em um objeto .NET. Como mostra a ilustração a seguir, a perspetiva do código de chamada determina qual classe wrapper o tempo de execução cria.

COM wrapper overview

Na maioria dos casos, o RCW ou CCW padrão gerado pelo tempo de execução fornece empacotamento adequado para chamadas que cruzam o limite entre COM e o tempo de execução do .NET. Usando atributos personalizados, você pode, opcionalmente, ajustar a maneira como o tempo de execução representa o código gerenciado e não gerenciado.

Consulte também