Erstellen einer File-Handler-Instanz in einer DLL

[Das dieser Seite zugeordnete Feature Benutzerdefinierte Datei- und Streamhandler ist ein Legacyfeature. Sie wurde durch die MediaStreamSource-Klasse ersetzt. Die MediaStreamSource-Klasse wurde für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit die MediaStreamSource-Klasse anstelle von Benutzerdefinierten Datei- und Streamhandlern verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Wenn eine Anwendung Ihre Dateihandler-DLL oder Ihren Streamhandler angibt, sucht das System sie in der Registrierung anhand des Klassenbezeichners und wird geladen. Das System ruft dann die DllGetClassObject-Funktion der DLL auf, um eine instance des Datei- oder Streamhandlers zu erstellen. Das folgende Beispiel (geschrieben in C++) zeigt, wie ein Dateihandler einen instance erstellt.

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