다음을 통해 공유


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에서 필터를 로드합니다. 필터를 마우스 오른쪽 단추로 클릭하고 필터 속성을 선택합니다.

필터 속성 페이지 만들기

DirectShow 필터 DLL을 만드는 방법