Condividi tramite


Creazione di un'istanza di File-Handler in una DLL

[La funzionalità associata a questa pagina, Custom File and Stream Handlers, è una funzionalità legacy. È stata sostituita dalla classe MediaStreamSource. La classe MediaStreamSource è stata ottimizzata per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi la classe MediaStreamSource anziché i gestori di file e di flusso personalizzati, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Quando un'applicazione specifica la DLL o il gestore di flusso del gestore file, il sistema lo cerca nel Registro di sistema in base al relativo identificatore di classe e caricato. Il sistema chiama quindi la funzione DllGetClassObject della DLL per creare un'istanza del file o del gestore di flusso. L'esempio seguente (scritto in C++) illustra come un gestore di file crea un'istanza di .

// 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; 
}