Поделиться через


Создание экземпляра File-Handler в библиотеке DLL

[Функция, связанная с этой страницей, Пользовательский обработчик файлов и потоков, относится к устаревшим функциям. Он был заменен классом MediaStreamSource. класс MediaStreamSource оптимизирован для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код класс MediaStreamSource вместо пользовательских файлов и обработчиков потоков, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Если приложение указывает DLL обработчик файлов или обработчик потока, система ищет его в реестре по идентификатору класса и загружает. После этого система вызывает функцию DllGetClassObject, чтобы создать экземпляр обработчика файлов или потоков. В следующем примере (написанном на C++) показано, как обработчик файлов создает экземпляр.

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