Compartilhar via


A Biblioteca COM

Qualquer processo que usa COM deve inicializar e cancelar a inicialização da biblioteca COM. Além de ser uma especificação, o COM também implementa alguns serviços importantes nesta biblioteca. Fornecida como um conjunto de DLLs e EXEs (principalmente Ole32.dll e Rpcss.exe) no Microsoft Windows, a biblioteca COM inclui o seguinte:

  • Um pequeno número de funções fundamentais que facilitam a criação de aplicativos COM, tanto cliente quanto servidor. Para clientes, o COM fornece funções básicas para a criação de objetos. Para servidores, o COM fornece os meios de expor seus objetos.

  • Serviços de localizador de implementação por meio dos quais o COM determina, a partir de um identificador de classe exclusivo (CLSID), qual servidor implementa essa classe e onde esse servidor está localizado. Esse serviço inclui suporte para um nível de indirecionamento, geralmente um registro do sistema, entre a identidade de uma classe de objeto e o empacotamento da implementação para que os clientes sejam independentes do empacotamento, o que pode mudar no futuro.

  • Chamadas de procedimento remoto transparentes quando um objeto está sendo executado em um servidor local ou remoto.

  • Um mecanismo padrão para permitir que um aplicativo controle como a memória é alocada dentro de seu processo, particularmente a memória que precisa ser passada entre objetos cooperantes para que possa ser liberada corretamente.

Para usar serviços COM básicos, todos os threads COM de execução em clientes e servidores fora de processo devem chamar a função CoInitialize ou CoInitializeEx antes de chamar qualquer outra função COM, exceto chamadas de alocação de memória. CoInitializeEx substitui a outra função, adicionando um parâmetro que permite especificar o modelo de threading do thread: apartment-threaded ou free-threaded. Uma chamada para CoInitialize simplesmente define o modelo de threading como apartment-threaded.

Os aplicativos de documento composto OLE chamam a função OleInitialize, que chama CoInitializeEx e também faz alguma inicialização necessária para documentos compostos. Portanto, threads que chamam OleInitialize não podem ser encadeados livremente. Para obter informações sobre threading em clientes e servidores, consulte Processos, threads e apartamentos.

Os servidores em processo não chamam as funções de inicialização porque estão sendo carregados em um processo que já fez isso. Como resultado, os servidores em processo devem definir seu modelo de threading no Registro sob a chave InprocServer32 . Para obter informações detalhadas sobre problemas de threading em servidores em processo, consulte Problemas de threading no servidor em processo.

Também é importante cancelar a inicialização da biblioteca. Para cada chamada para CoInitialize ou CoInitializeEx, deve haver uma chamada correspondente para CoUninitialize. Para cada chamada para OleInitialize, deve haver uma chamada correspondente para OleUninitialize.

Os servidores em processo podem assumir que o processo em que estão sendo carregados já executou essas etapas.

O Component Object Model