Creazione di un'istanza di File-Handler in una DLL
[La funzionalità associata a questa pagina, gestori di file e flussi personalizzati, è una funzionalità legacy. La classe MediaStreamSource ha sostituito. classe MediaStreamSource è stata ottimizzata per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare il nuovo codice classe MediaStreamSource anziché gestori di file personalizzati e di flusso, 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 del gestore di file o il gestore di flussi, il sistema li cerca nel Registro di sistema in base all'identificatore di classe e li carica. Il sistema chiama quindi la funzionedllGetClassObjectdella DLL per creare un'istanza del gestore del file o del flusso. L'esempio seguente (scritto in C++) mostra come un gestore di file crea un'istanza.
// 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;
}