방금 DSPACK 구성 요소 라이브러리를 사용하는 Delphi 6 DirectShow 응용 프로그램의 "부실한"인터페이스 참조로 인해 발생한 긴 디버그 세션이있었습니다. 아시다시피 필터 그래프가 활성화되어있을 때 수행해야 할 작업과 필터 그래프를 비활성화해야 할 때 구성 요소 매개 변수를 완료해야하는 작업이 있습니다. 문제는 사용자가 초기화 된 값 (NIL이 아닌 할당 된 값)을 가지고 있지만 필터 그래프의 이전 구체화 중에 만들어 졌기 때문에 현재 필터 그래프 화신에 유효하지 않은 DirectShow 인터페이스 참조로 끝날 수 있다는 것입니다. 실수로 수행하는 것이 그리 쉽지는 않지만 필터 그래프를 켜고 끄고 "실시간"검색 작업과 오프라인 구성 작업간에 전환 할 수 있습니다. 오프라인 작업의 예는 다음에 그래프가 켜질 때 구체적인 필터 인스턴스를 생성 할 때 사용할 DSPACK 구성 요소 중 하나에 대한 Moniker를 설정하는 것입니다."오래된"DirectShow 인터페이스 참조를 보호하는 자동 방법이 있습니까?
예를 들어 필터 그래프를 처음 활성화 할 때 할당 한 IBaseFilter 참조를 가질 수 있으며 필터 그래프를 비활성화하고 다시 활성화 한 후에 다시 사용하려고했습니다. 인터페이스 그래프는, 필터 그래프의 현재의 구체화에는 속하지 않고, 이전의 인터페이스 그래프에 속하기 때문에, 인터페이스는 "stale"가되었습니다. 이로 인해 모든 종류의 이상하고 직관적이지 않은 DirectShow 오류 메시지가 나타나지만 실제로는 인터페이스 참조가 오래되어서 발생합니다.
관례에 따라 또는 DirectShow 스마트 포인터와 같은 현명한 솔루션으로 필터 그래프의 수명이 다한 것을 방지하기 위해 누군가가 방법을 제안 했습니까? 아니면 인터페이스 참조 사용에 대해 끊임없이주의해야 할 유일한 해결책입니까?