10단계. COM 등록 지원
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
마지막으로 남은 작업은 속성 프레임이 속성 페이지의 새 인스턴스를 만들 수 있도록 COM 등록을 지원하는 것입니다. DLL의 모든 COM 개체를 등록하는 데 사용되는 다른 CFactoryTemplate 항목을 전역 g_Templates 배열에 추가합니다. 속성 페이지에 대한 필터 설정 정보는 포함하지 마세요.
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에서 필터를 로드합니다. 필터를 마우스 오른쪽 단추로 클릭하고 필터 속성을 선택합니다.
관련 항목