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) |