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