Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O COM difere do modelo de objeto de runtime 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 recebendo de volta 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.
Os objetos NET residem na memória gerenciada pelo ambiente de execução do runtime 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 ele 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 cujo local não está fixo.
Para superar essas diferenças, o runtime fornece classes wrapper para fazer com que os clientes gerenciados e não gerenciados pensem que estão chamando objetos em seu respectivo ambiente. Sempre que o cliente gerenciado chama um método em um objeto COM, o runtime cria um runtime callable wrapper (RCW). Os RCWs abstraem as diferenças entre mecanismos de referência gerenciados e não gerenciados, entre outras coisas. O runtime também cria um CCW (COM Callable Wrapper) para reverter o processo, permitindo que um cliente COM chame um método em um objeto .NET diretamente. A ilustração a seguir mostra que a perspectiva do código que realiza a chamada determina qual classe wrapper o runtime cria.
Na maioria dos casos, o RCW padrão ou o CCW gerado pelo runtime fornece o marshaling adequado para chamadas que cruzam o limite entre o COM e o runtime do .NET. Usando atributos personalizados, você pode, opcionalmente, ajustar a maneira como o runtime representa código gerenciado e não gerenciado.