Creación de una instancia de File-Handler en un archivo DLL
[La característica asociada a esta página, Controladores de secuencia y archivos personalizados, es una característica heredada. Se ha reemplazado por la clase MediaStreamSource. La clase MediaStreamSource se ha optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use la clase MediaStreamSource en lugar de controladores de secuencias y archivos personalizados, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
Cuando una aplicación especifica el archivo DLL o el controlador de flujo del controlador de archivos, el sistema lo busca en el Registro por su identificador de clase y cargado. A continuación, el sistema llama a la función DllGetClassObject del archivo DLL para crear una instancia del controlador de secuencia o archivo. En el ejemplo siguiente (escrito en C++) se muestra cómo un controlador de archivos crea una instancia.
// 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;
}