Enumeração REGCLS (combaseapi.h)

Controla o tipo de conexões com um objeto de classe.

Syntax

typedef enum tagREGCLS {
  REGCLS_SINGLEUSE = 0,
  REGCLS_MULTIPLEUSE = 1,
  REGCLS_MULTI_SEPARATE = 2,
  REGCLS_SUSPENDED = 4,
  REGCLS_SURROGATE = 8,
  REGCLS_AGILE = 0x10
} REGCLS;

Constantes

 
REGCLS_SINGLEUSE
Valor: 0
Depois que um aplicativo é conectado a um objeto de classe com CoGetClassObject, o objeto de classe é removido da exibição pública para que nenhum outro aplicativo possa se conectar a ele. Esse valor é comumente usado para aplicativos SDI (single-document interface). Especificar esse valor não afeta a responsabilidade do aplicativo de objeto de chamar CoRevokeClassObject; ele sempre deve chamar CoRevokeClassObject quando terminar com uma classe de objeto.
REGCLS_MULTIPLEUSE
Valor: 1
Vários aplicativos podem se conectar ao objeto de classe por meio de chamadas para CoGetClassObject. Se os REGCLS_MULTIPLEUSE e CLSCTX_LOCAL_SERVER forem definidos em uma chamada para CoRegisterClassObject, o objeto de classe também será registrado automaticamente como um servidor em processo, independentemente de CLSCTX_INPROC_SERVER ser definido explicitamente.
REGCLS_MULTI_SEPARATE
Valor: 2
Útil para registrar fábricas de classes CLSCTX_LOCAL_SERVER e CLSCTX_INPROC_SERVER separadas por meio de chamadas para CoGetClassObject. Se REGCLS_MULTI_SEPARATE for definido, cada contexto de execução deverá ser definido separadamente; CoRegisterClassObject não registra automaticamente um servidor fora do processo (para o qual CLSCTX_LOCAL_SERVER está definido) como um servidor em processo. Isso permite que o EXE crie várias instâncias do objeto para necessidades em processo, como auto-inserções, sem perturbar seu registro de CLSCTX_LOCAL_SERVER. Se um EXE registrar uma fábrica de classes REGCLS_MULTI_SEPARATE e uma fábrica de classes CLSCTX_INPROC_SERVER, as chamadas de criação de instância que especificam CLSCTX_INPROC_SERVER no parâmetro CLSCTX executado pelo EXE serão atendidas localmente sem se aproximar do SCM. Esse mecanismo é útil quando o EXE usa funções como OleCreate e OleLoad para criar inserções, mas, ao mesmo tempo, não deseja iniciar uma nova instância de si mesma para o caso de auto-inserção. A distinção é importante para inserções porque o manipulador padrão agrega o gerenciador de proxy por padrão e o aplicativo deve substituir esse comportamento padrão chamando OleCreateEmbeddingHelper para o caso de autoinserção.

Se o aplicativo não precisar distinguir entre o caso local e inproc, você não precisará registrar sua fábrica de classes usando REGCLS_MULTI_SEPARATE. Na verdade, o aplicativo incorre em uma viagem de ida e volta de rede extra ao SCM quando registra sua fábrica de classes MULTIPLEUSE como MULTI_SEPARATE e não registra outra fábrica de classes como INPROC_SERVER.
REGCLS_SUSPENDED
Valor: 4
Suspende solicitações de registro e ativação para o CLSID especificado até que haja uma chamada para CoResumeClassObjects. Isso é usado normalmente para registrar os CLSIDs para servidores que podem registrar vários objetos de classe para reduzir o tempo de registro geral e, portanto, o tempo de inicialização do aplicativo do servidor, fazendo uma única chamada para o SCM, independentemente de quantos CLSIDs sejam registrados para o servidor.

Nota Esse sinalizador impede erros de ativação COM de uma possível condição de corrida entre um aplicativo desligado e esse aplicativo tentando registrar uma classe COM.

 
REGCLS_SURROGATE
Valor: 8
O objeto de classe é um processo alternativo usado para executar os servidores DLL. A fábrica de classes registrada pelo processo alternativo não é a fábrica de classes real implementada pelo servidor DLL, mas uma fábrica de classes genérica implementada pelo substituto. Essa fábrica de classes genérica delega a criação e o marshaling da instância para a fábrica de classes do servidor DLL em execução no substituto. Para obter mais informações sobre substitutos de DLL, consulte o valor do registro DllSurrogate .
REGCLS_AGILE
Valor: 0x10
O objeto de classe agrega o marshaler de thread livre
e serão visíveis para todos os apartamentos inproc. Pode ser usado junto com outros sinalizadores. Por exemplo, REGCLS_AGILE
REGCLS_MULTIPLEUSE registrar um
objeto de classe que pode ser usado várias vezes de
apartamentos diferentes. Sem outros sinalizadores, comportamento
manterá a semântica REGCLS_SINGLEUSE em que apenas
uma instância pode ser gerada.

Comentários

Em CoRegisterClassObject, os membros das enumerações REGCLS e CLSCTX , juntas, determinam como o objeto de classe é registrado.

Um substituto do EXE (no qual os servidores DLL são executados) chama CoRegisterClassObject para registrar uma fábrica de classes usando um novo valor REGCLS , REGCLS_SURROGATE.

Todas as fábricas de classes para substitutos de DLL devem ser registradas com REGCLS_SURROGATE conjunto. Não defina REGCLS_SINGLUSE ou REGCLS_MULTIPLEUSE ao registrar um substituto para servidores DLL.

A tabela a seguir resume as combinações de valor REGCLS permitidas e os registros de objeto afetados pelas combinações.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Outro
CLSCTX_INPROC_SERVER Erro Em processo Em processo Erro
CLSCTX_LOCAL_SERVER Local Em processo/local Local Erro
As duas opções acima Erro Em processo/local Em processo/local Erro
Outro Erro Erro Erro Erro

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho combaseapi.h (inclua Objbase.h)

Confira também

Cogetclassobject

Coregisterclassobject

Dllgetclassobject

DllSurrogate