Partilhar via


Usar o substituto fornecido pelo sistema

Para usar o substituto fornecido pelo sistema para o servidor DLL, registre a DLL especificando uma cadeia de caracteres vazia ou NULL para o valor DllSurrogate no registro. Quando uma solicitação de ativação para um servidor DLL assim designado chega ao COM, o COM inicia o processo substituto padrão e a DLL solicitada (especificando o CLSID na linha de comando de inicialização internamente) ao mesmo tempo para evitar uma chamada separada. (Para obter informações sobre como executar mais de um servidor DLL em um processo substituto, confira Compartilhamento substituto.)

A implementação padrão do processo substituto é um servidor pseudo-COM de estilo de modelo de threading misto. Quando vários servidores DLL são carregados em um único processo substituto, esse processo garante que cada servidor DLL seja instanciado usando o modelo de threading especificado no registro para esse servidor. Todos os servidores de thread livre carregados ficam juntos no Multi-Threaded Apartment, enquanto cada servidor do Apartment Threading residirá em um Apartment Threading único. Se um servidor DLL der suporte a ambos os modelos de threading, o COM escolherá multithreading.

Esse processo substituto é gravado para que o COM processe o descarregamento de servidores DLL e o encerramento do processo substituto. O tempo de vida do processo é informado principalmente pelo número de objetos empacotados no substituto, que atua como uma medida heurística de dependências externas no processo. Embora a intenção seja representar dependências externas, esse modelo de tempo de vida não distingue entre marshaling em proc e fora de proc. Tome cuidado para evitar fixar involuntariamente o substituto por meio de marshaling entre apartamentos ou por meio de mecanismos baseados em marshaling em proc, como a tabela de interface global ou IAgileReference.

O substituto fornecido pelo sistema funcionará muito bem para a maioria dos desenvolvedores, além de ser muito fácil de usar. No entanto, os desenvolvedores com considerações especiais podem decidir que um substituto personalizado é necessário. Para obter mais informações, confira Criar um substituto personalizado.