2010-02-28 5 views
1

DirectShow의 씬 래퍼 인 DirectShowLib를 사용하고 있습니다. BDA 장치를 성공적으로 나열하고 해당 CLSID를 수집했습니다. 이제 사용자가 이름으로 기기를 선택하고 선택한 CLSID를 알고있을 때 필터 그래프에이 기기를 추가해야합니다. 알려진 클래스 ID를 가진 장치 모니 커를 얻는 방법?

나는 한 다음

Type type = Type.GetTypeFromCLSID(classid); 
object device = Activator.CreateInstance(type); 

이제 문제는 - 내가 장치에 여기에 도착 객체의 어떤 종류의? 디버거는 올바른 Com 개체임을 보여줍니다. IBaseFilter로 변환하려고하면 "No such interface supported"예외가 발생합니다. IMoniker에 성공적으로 캐스팅 할 수 있습니다. 나는 다음을 수행하려고하면 그러나 :

int hr = graphBuilder.AddSourceFilterForMoniker(
    device, null, filtername, out receivedFilter); 

나는 오류 얻을 : 내가 아는

HRESULT: 0x800401e4 (2147746276) 
Name: MK_E_SYNTAX 

을 그것이 내가 그냥 것 같다, 그래서 내가 바로 열거 후 사용하면 잘 작동 AddSourceFilterForMoniker 방법 모니 커 권리를 창출하지 마십시오.

클래스 ID가 알려진 경우 모니 커 객체를 만드는 올바른 방법은 무엇입니까? AddSourceFilterForMoniker에 전달할 수 있습니까?

답변

1

짐작할 만하지만 IBindCtx 구현을 만들지 않은 것처럼 보입니다. 내가 본 적이있는 IMoniker을 포함하는 모든 작업에는 모니 커와 관련된 작업에 대한 컨텍스트를 제공하기 위해 IBindCtx 구현이 전달되어야합니다.

즉, AddSourceFilterForMoniker 메서드는 별칭에 대한 바인딩 컨텍스트를 전달하지 않는다는 점에서 다르지 않습니다.

+0

감사합니다. IBindCtx에 대한 아이디어는 올바른 방향으로 나를 잡았습니다. – JustAMartin