Criando uma instância de File-Handler em uma DLL
[O recurso associado a esta página, manipuladores de arquivo e fluxo personalizados, é um recurso herdado. Ele foi substituído pela classe MediaStreamSource . da classe MediaStreamSource foi otimizada para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use a classe MediaStreamSource, em vez de Manipuladores de Arquivos e Fluxo Personalizados, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Quando um aplicativo especifica a DLL do manipulador de arquivos ou o manipulador de fluxo, o sistema a procura no registro pelo identificador de classe e a carrega. Em seguida, o sistema chama a função DllGetClassObject da DLL para criar uma instância do manipulador de fluxo ou arquivo. O exemplo a seguir (escrito em C++) mostra como um manipulador de arquivos cria uma instância.
// 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;
}