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