Parece que os objetos COM são objetos de uso geral regidos pelo sistema operacional. Os objetos seguem uma interface estrita e permitem que você consulte os objetos para determinar as informações. É isso que objetos COM são?
COM é um mecanismo que permite a reutilização de objetos (ou melhor, componentes), independentemente das linguagens utilizadas pelo programador que implementou o componente e do programador que o utiliza, e independentemente se o componente foi implementado no programa do cliente ou em outro local da máquina (ou rede).
Em termos gerais, cada componente COM fornece uma implementação de uma ou mais interfaces. Essas interfaces são definidas de maneira neutra em termos de linguagem, usando a Interface Definition Language (IDL) . Por exemplo, uma das interfaces fundamentais em COM, IUnknown , é definida assim:
interface IUnknown
{
virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
virtual ULONG AddRef(void) = 0;
virtual ULONG Release(void) = 0;
};
Esta pequena interface é fundamental em COM, pois cada componente COM deve implementá-la. Ele define dois aspectos importantes da máquina COM:
QueryInterface
permite chamar o código para obter uma implementação para uma interface conhecida. No COM, as interfaces são referenciadas por GUIDs (também conhecidos como Identificadores de Interface, IID). Se um objeto implementa várias interfaces, é assim que o código do cliente obtém uma referência para cada uma dessas interfaces. Ele atua como uma espécie de operador de fundição, se você quiser.AddRef()
e Release()
implementar o mecanismo de gerenciamento de memória para objetos COM. Como o nome sugere, o modelo mais comum é o mecanismo de contagem de referência, em que uma instância é destruída depois que o último cliente liberou sua referência a ela.Todos os componentes COM são registrados no sistema durante a instalação. Se um programador deseja usar um determinado componente, ele precisa:
CoCreateInstance()
). Você pode olhar no registro em HKEY_CLASSES_ROOT\CLSID
: cada GUID lá é (muito provavelmente) um identificador para um componente ou interface COM, e as entradas abaixo dessa chave informam ao sistema como ele deve ser instalado.A máquina COM é extremamente complexa. Por exemplo, implementar ou usar componentes COM em C requer uma quantidade enorme de trabalho, mas linguagens de nível superior como o Visual Basic fizeram muito para facilitar a implementação e o uso de componentes COM. Os benefícios são, entretanto, muito reais. Torna possível escrever um aplicativo em, digamos, Visual Basic, mas ainda implementar os algoritmos de desempenho crítico em C ou C ++ como objetos COM, que podem ser usados diretamente do código VB. O sistema cuida de empacotar argumentos de chamada de método, passando-os por threads, processos e conexões de rede conforme necessário para que o código do cliente tenha a impressão de estar usando um objeto normal.
Muitas partes fundamentais do Windows são baseadas em COM. O Windows Explorer (o gerenciador de arquivos), por exemplo, é basicamente um shell vazio. Ele define várias interfaces COM para navegar e exibir hierarquias de árvore, e todo o código que realmente exibe "Meu computador", as unidades, as pastas e os arquivos é um conjunto de componentes COM que implementam essas interfaces.
Com o advento do .NET, o COM está lentamente se tornando obsoleto.
COM é um mecanismo que foi desenvolvido para permitir que as pessoas distribuam binários que podem ser reutilizados mesmo se o chamador estiver usando o compilador C ++ de outro fornecedor ou (no final das contas) uma linguagem completamente diferente.
Se você quiser uma boa introdução ao COM, leia Essential COM da Don Box .
fonte