Función DllGetClassObject (combaseapi.h)
Recupera el objeto de clase de un controlador de objetos DLL o una aplicación de objeto.
OLE no proporciona esta función. Los archivos DLL que admiten el modelo de objetos componentes OLE (COM) deben implementar DllGetClassObject en controladores de objetos OLE o aplicaciones DLL.
Sintaxis
HRESULT DllGetClassObject(
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] LPVOID *ppv
);
Parámetros
[in] rclsid
CLSID que asociará los datos y el código correctos.
[in] riid
Referencia al identificador de la interfaz que el autor de la llamada va a usar para comunicarse con el objeto de clase. Normalmente, esto es IID_IClassFactory (definido en los encabezados OLE como identificador de interfaz para IClassFactory).
[out] ppv
Dirección de una variable de puntero que recibe el puntero de interfaz solicitado en riid. Tras la devolución correcta, *ppv contiene el puntero de interfaz solicitado. Si se produce un error, el puntero de interfaz es NULL.
Valor devuelto
Esta función puede devolver los valores devueltos estándar E_INVALIDARG, E_OUTOFMEMORY y E_UNEXPECTED, así como los siguientes valores.
Código devuelto | Descripción |
---|---|
|
El objeto se recuperó correctamente. |
|
El archivo DLL no admite la clase (definición de objeto). |
Comentarios
Si una llamada a la función CoGetClassObject busca el objeto de clase que se va a cargar en un archivo DLL, CoGetClassObject usa la función DllGetClassObject exportada del archivo DLL.
Notas a los autores de llamadas
No debe llamar directamente a DllGetClassObject . Cuando se define un objeto en un archivo DLL, CoGetClassObject llama a la función CoLoadLibrary para cargar el archivo DLL, que, a su vez, llama a DllGetClassObject.Notas para los implementadores
Debe implementar DllGetClassObject en archivos DLL (y exportarlos desde) que admitan COM.Ejemplos
A continuación se muestra un ejemplo (en C++) de una implementación de DllGetClassObject. En este ejemplo, DllGetClassObject crea un objeto de clase y llama a su método QueryInterface para recuperar un puntero a la interfaz solicitada en riid. La implementación libera la referencia que contiene a la interfaz IClassFactory porque devuelve un puntero con recuento de referencias a IClassFactory al autor de la llamada.
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 | Value |
---|---|
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | combaseapi.h (incluya Objbase.h) |