Criando objetos COM Registration-Free
Os contextos de ativação permitem que objetos COM sejam usados sem exigir que eles 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 do 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 um aplicativo solicita um GUID de CLSIDFromProgID, o COM pesquisa primeiro o mapeamento de progid para CLSID no contexto de ativação ativa. Quando um aplicativo usa CoCreateInstance para obter um ponteiro de interface de instância, o COM pesquisa no contexto de ativação ativo para localizar qual DLL hospedará o CLSID. Se o contexto de ativação não contiver as informações necessárias, o COM pesquisará as informações no Registro usando o método usual.
Observe que, como os contextos de ativação são por thread, o COM realiza marshaling do contexto de ativação do thread de criação para o thread do host e o ativa antes de chamar LoadLibrary ou DllGetClassObject no thread do host. Essa 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.