Função DllGetClassObject (combaseapi.h)

Recupera o objeto de classe de um manipulador de objeto DLL ou aplicativo de objeto.

O OLE não fornece essa função. As DLLs que dão suporte ao COM (Modelo de Objeto de Componente OLE) devem implementar DllGetClassObject em manipuladores de objetos OLE ou aplicativos DLL.

Sintaxe

HRESULT DllGetClassObject(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Parâmetros

[in] rclsid

O CLSID que associará os dados e o código corretos.

[in] riid

Uma referência ao identificador da interface que o chamador deve usar para se comunicar com o objeto de classe. Normalmente, isso é IID_IClassFactory (definido nos cabeçalhos OLE como o identificador de interface para IClassFactory).

[out] ppv

O endereço de uma variável de ponteiro que recebe o ponteiro de interface solicitado em riid. Após o retorno bem-sucedido, *ppv contém o ponteiro de interface solicitado. Se ocorrer um erro, o ponteiro da interface será NULL.

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 foi recuperado com êxito.
CLASS_E_CLASSNOTAVAILABLE
A DLL não dá suporte à classe (definição de objeto).

Comentários

Se uma chamada para a função CoGetClassObject encontrar o objeto de classe que deve ser carregado em uma DLL, CoGetClassObject usará a função DllGetClassObject exportada da DLL.

Anotações para chamadores

Você não deve chamar DllGetClassObject diretamente. Quando um objeto é definido em uma DLL, CoGetClassObject chama a função CoLoadLibrary para carregar a DLL, que, por sua vez, chama DllGetClassObject.

Anotações aos implementadores

Você precisa implementar DllGetClassObject em DLLs (e exportá-la de) que dão suporte a COM.

Exemplos

Veja a seguir um exemplo (em C++) de uma implementação de DllGetClassObject. Neste exemplo, DllGetClassObject cria um objeto de classe e chama seu método QueryInterface para recuperar um ponteiro para a interface solicitada em riid. A implementação libera a referência que contém à interface IClassFactory porque retorna um ponteiro contado por referência para IClassFactory para o chamador.

HRESULT_export CALLBACK DllGetClassObject 
    (REFCLSID rclsid, REFIID riid, LPVOID * ppvObj) 
{ 
    HRESULT hr = E_OUTOFMEMORY; 
    *ppvObj = NULL; 
 
    CClassFactory *pClassFactory = new CClassFactory(rclsid); 
    if (pClassFactory != NULL)   { 
        hr = pClassFactory->QueryInterface(riid, ppvObj); 
        pClassFactory->Release(); 
    } 
    return hr;
} 

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]
Plataforma de Destino Windows
Cabeçalho combaseapi.h (inclua Objbase.h)

Confira também

Cogetclassobject

Dllcanunloadnow