# DllGetClassObject

Retrieves the class object from a DLL object handler or object application. DllGetClassObject is called from within the CoGetClassObject function when the class context is a DLL.

Note OLE does not provide this function. DLLs that support the OLE Component Object Model (COM) must implement DllGetClassObject in OLE object handlers or DLL applications.

STDAPI DllGetClassObject(

REFCLSID rclsid, | //CLSID for the class object
REFIID riid, | //Reference to the identifier of the interface that communicates with the class object
LPVOID * ppv | //Indirect pointer to the communicating interface
); |

Parameters

rclsid
  [in] CLSID that will associate the correct data and code.
riid
  [in] Reference to the identifier of the interface that the caller is to use to communicate with the class object. Usually, this is IID_IClassFactory (defined in the OLE headers as the interface identifier for IClassFactory).
ppv
  [out] Indirect pointer to the requested interface or, if an error occurs, to NULL.

Return Values

This function supports the standard return values E_INVALIDARG, E_OUTOFMEMORY and E_UNEXPECTED, as well as the following:

S_OK
  The object was retrieved successfully.
CLASS_E_CLASSNOTAVAILABLE
  The DLL does not support the class (object definition).

Remarks

If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL, CoGetClassObject uses the DLL’s exported DllGetClassObject function.

##### Notes to Callers

You should not call DllGetClassObject directly. When an object is defined in a DLL, CoGetClassObject calls the CoLoadLibrary function to load the DLL, which, in turn, calls DllGetClassObject.

##### Notes to Implementers

You need to implement DllGetClassObject in (and export it from) DLLs that support the OLE Component Object Model.

Example

Following is an example (in C++) of an implementation of DllGetClassObject. In this example, DllGetClassObject creates a class object and calls its QueryInterface method to retrieve a pointer to the interface requested in riid. The implementation safely releases the reference it holds to the IClassFactory interface because it returns a reference-counted pointer to IClassFactory to the caller.

    HRESULT_export  PASCAL DllGetClassObject
            (REFCLSID rclsid, REFIID riid, LPVOID * ppvObj)
    {
        HRESULT hres = E_OUTOFMEMORY;
        *ppvObj = NULL;

        CClassFactory *pClassFactory = new CClassFactory(rclsid);
        if (pClassFactory != NULL)   {
            hRes = pClassFactory->QueryInterface(riid, ppvObj);
            pClassFactory->Release();
        }
        return hRes;
    }

See Also

CoGetClassObject, DllCanUnloadNow