Função CoRegisterClassObject (combaseapi.h)

Registra um objeto de classe EXE com OLE para que outros aplicativos possam se conectar a ele.

Sintaxe

HRESULT CoRegisterClassObject(
  [in]  REFCLSID  rclsid,
  [in]  LPUNKNOWN pUnk,
  [in]  DWORD     dwClsContext,
  [in]  DWORD     flags,
  [out] LPDWORD   lpdwRegister
);

Parâmetros

[in] rclsid

O CLSID a ser registrado.

[in] pUnk

Um ponteiro para a interface IUnknown no objeto de classe cuja disponibilidade está sendo publicada.

[in] dwClsContext

O contexto no qual o código executável deve ser executado. Para obter informações sobre esses valores de contexto, consulte a enumeração CLSCTX .

[in] flags

Indica como as conexões são feitas com o objeto de classe. Para obter informações sobre esses sinalizadores, consulte a enumeração REGCLS .

[out] lpdwRegister

Um ponteiro para um valor que identifica o objeto de classe registrado; posteriormente usado pela função CoRevokeClassObject para revogar o registro.

Retornar valor

Essa função pode retornar os valores de retorno padrão E_INVALIDARG, E_OUTOFMEMORY e E_UNEXPECTED, bem como os valores a seguir.

Código de retorno Descrição
S_OK
O objeto de classe foi registrado com êxito.

Comentários

Os aplicativos de objeto EXE devem chamar CoRegisterClassObject na inicialização. Ele também pode ser usado para registrar objetos internos para uso pelo mesmo EXE ou outro código (como DLLs) que o EXE usa. Somente aplicativos de objeto EXE chamam CoRegisterClassObject. Manipuladores de objetos ou aplicativos de objeto DLL não chamam essa função — em vez disso, eles devem implementar e exportar a função DllGetClassObject .

Na inicialização, um aplicativo de objeto EXE de uso múltiplo deve criar um objeto de classe (com a interface IClassFactory ) e chamar CoRegisterClassObject para registrar o objeto de classe. Aplicativos de objeto que dão suporte a várias classes diferentes (como vários tipos de objetos inseriveis) devem alocar e registrar um objeto de classe diferente para cada uma.

Vários registros do mesmo objeto de classe são independentes e não produzem um erro. Cada registro subsequente produz uma chave exclusiva em lpdwRegister.

Vários aplicativos de MDI (interface de documento) devem registrar seus objetos de classe. Os aplicativos SDI (interface de documento único) devem registrar seus objetos de classe somente se puderem ser iniciados por meio da opção /Embedding .

O servidor de um objeto de classe deve chamar CoRevokeClassObject para revogar o objeto de classe (remover seu registro) quando todos os seguintes forem verdadeiros:

  • Não há instâncias existentes da definição de objeto.
  • Não há bloqueios no objeto de classe.
  • O aplicativo que fornece serviços para o objeto de classe não está sob controle do usuário (não visível para o usuário na exibição).
Depois que o objeto de classe for revogado, quando sua contagem de referência atingir zero, o objeto de classe poderá ser liberado, permitindo que o aplicativo saia. Observe que CoRegisterClassObject chama IUnknown::AddRef e CoRevokeClassObject chama IUnknown::Release, de modo que as duas funções formam um par addRef/Release .

A partir do Windows Server 2003, se um aplicativo de objeto COM for registrado como um serviço, COM verificará o registro. O COM garante que a ID do processo do serviço, no SCM (gerenciador de controle de serviço), corresponda à ID do processo de registro. Caso contrário, COM falhará no registro. Se o aplicativo de objeto COM for executado na conta do sistema sem chave do Registro, COM tratará a identidade do aplicativo de objetos como Inicializando Usuário.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho combaseapi.h (inclua Objbase.h)
Biblioteca Ole32.lib
DLL Ole32.dll

Confira também

CLSCTX

Cogetclassobject

Corevokeclassobject

Dllgetclassobject

REGCLS