在 DLL 中创建File-Handler实例

[与此页面关联的功能 (自定义文件和流处理程序)是一项旧功能。 它已被 MediaStreamSource 类取代。 MediaStreamSource 类已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaStreamSource 类 ,而不是 自定义文件和流处理程序。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

当应用程序指定文件处理程序 DLL 或流处理程序时,系统会按其类标识符在注册表中查找并加载它。 然后,系统调用 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; 
}