Создание экземпляра 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;
}