Partilhar via


Criando objetos COM Registration-Free

Os contextos de ativação permitem que os objetos COM sejam usados sem exigir que sejam registrados. Isso permite que seu aplicativo tenha vários componentes com funcionalidades diferentes com base em sua versão, em vez de suas informações de registro. Vários componentes podem expor o mesmo objeto COM com o mesmo GUID, mas têm funcionalidades diferentes com base na versão.

Quando uma aplicação solicita um GUID de CLSIDFromProgID, o COM primeiro procura o mapeamento de ProgID para CLSID no contexto de ativação ativa. Quando uma aplicação usa CoCreateInstance para obter um ponteiro de interface de instância, o COM procura no contexto de ativação ativa para encontrar qual DLL hospedará o CLSID. Se o contexto de ativação não contiver as informações necessárias, COM procurará as informações no registro usando o método usual.

Observe que, como os contextos de ativação são por thread individual, o COM transfere o contexto de ativação do thread de criação para o thread do host e ativa-o antes de chamar LoadLibrary ou DllGetClassObject no thread do host. Esta funcionalidade já está presente no Windows, o código do cliente não é necessário para fazer nada para implementar isso.

As classes COM podem ser exportadas por componentes hospedados sem passar pelo registro. Vários componentes podem expor o mesmo ProgID para diferentes objetos COM, e seu aplicativo de hospedagem só deve encontrar o contexto de ativação adequado e, em seguida, usar CLSIDFromProgID e CoCreateInstance para obter os ponteiros de interface do objeto hospedado.