Création d’une instance de File-Handler dans une DLL
Lorsqu’une application spécifie la DLL du gestionnaire de fichiers ou le gestionnaire de flux, le système la recherche dans le registre par son identificateur de classe et est chargé. Le système appelle ensuite la fonction DllGetClassObject de la dll pour créer une instance du gestionnaire de fichiers ou de flux. L’exemple suivant (écrit en C++) montre comment un gestionnaire de fichiers crée une instance.
// Main DLL entry point.
STDAPI DllGetClassObject(const CLSID FAR& rclsid,
const IID FAR& riid, void FAR* FAR* ppv)
{
HRESULT hresult;
hresult = CAVIFileCF::Create(rclsid, riid, ppv);
return hresult;
}
HRESULT CAVIFileCF::Create(const CLSID FAR& rclsid,
const IID FAR& riid, void FAR* FAR* ppv)
{
// The following is the class factory creation and not an
// actual PAVIFile.
CAVIFileCF FAR* pAVIFileCF;
IUnknown FAR* pUnknown;
HRESULT hresult;
// Create the instance.
pAVIFileCF = new FAR CAVIFileCF(rclsid, &pUnknown);
if (pAVIFileCF == NULL)
return ResultFromScode(E_OUTOFMEMORY);
// Set the interface pointer.
hresult = pUnknown->QueryInterface(riid, ppv);
if (FAILED(GetScode(hresult)))
delete pAVIFileCF;
return hresult;
}