步骤 10. 支持 COM 注册
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
剩余的最后一个任务是支持 COM 注册,以便属性框架可以创建属性页的新实例。 将另一个 CFactoryTemplate 条目添加到全局 g_Templates 数组,该数组用于注册 DLL 中的所有 COM 对象。 不要包含属性页的任何筛选器设置信息。
const AMOVIESETUP_FILTER FilterSetupData =
{
/* Not shown ... */
};
CFactoryTemplate g_Templates[] =
{
// This entry is for the filter.
{
wszName,
&CLSID_GrayFilter,
CGrayFilter::CreateInstance,
NULL,
&FilterSetupData
},
// This entry is for the property page.
{
L"Saturation Props",
&CLSID_SaturationProp,
CGrayProp::CreateInstance,
NULL, NULL
}
};
如果声明 g_cTemplates 如以下代码所示,则它根据数组大小自动具有正确的值:
int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);
此外,将静态 CreateInstance
方法添加到属性页类。 可以根据需要命名方法,但签名必须与以下示例所示的签名匹配:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
{
CGrayProp *pNewObject = new CGrayProp(pUnk);
if (pNewObject == NULL)
{
*pHr = E_OUTOFMEMORY;
}
return pNewObject;
}
若要测试属性页,请注册 DLL,然后在 GraphEdit 中加载筛选器。 右键单击筛选器,然后选择“ 筛选器属性”。
相关主题