Windows API에서 하나 이상의 COM 인터페이스를 사용하는 C++ 클래스를 작성했습니다. 분명히 클래스 내부에서 이러한 객체를 사용할 때 AddRef()
및 Release()
을 올바르게 호출해야합니다.클래스에서 IUnknown을 구현하는시기
내 질문은 ... IUnknown
을 C++ 클래스 자체에 추가로 구현해야합니까? 내 이해는 내가 사용하고있는 인터페이스가 비동기 작업이나 콜백을 수행하는 경우에만 수행하면된다는 것입니다. 이 경우 비동기 작업이나 콜백이 완료되면 C++ 클래스 자체가 "활성"상태인지 확인해야합니다. 이 올바른지?
명확한 설명을 위해 (그리고 Hans의 의견에 따라) 관심있는 특정 인터페이스는 IMFSourceReader
(Windows Media Foundation)입니다. 이 인터페이스의 기본값은 동기 모드입니다. 다시 말하지만, 정확하게 이것을 이해한다면, 비동기 모드에서 대신 사용할 경우에만 IUnknown
을 C++ 클래스에 구현하면됩니다. 그렇지 않으면 IMFSourceReader->AddRef()
또는 IMFSourceReader->Release
으로 전화하면 충분합니다.
그러나 비동기 모드에서 IMFSourceReader
을 사용하려면 IMFSourceReaderCallback
인터페이스가 필요하며 그 자체는 IUnknown
을 상속합니다. 이 경우 클래스에서 구현해야합니다.
내 이해가 정확합니까? 아직 구현을 작성하는 초기 단계에 있으므로 공유 할 예제 코드가 실제로 없습니다. 이 시점에서 나는 단지 내 수업의 아주 기본적인 구조를 내려 놓으려고 노력하고있다.
이미 [How IUnknown Works] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd388915(v=vs.85).aspx)를 읽으셨습니까? – user0042
Windows에서 구현 한 COM 인터페이스라면 분명히 모호한 질문을하지 않아도됩니다. 매뉴얼을 요구하지 말고, 당신이하려는 것을 보여주십시오. –
팁 :'AddRef()'와'Release()'호출을 적절히하기 위해 래퍼 클래스와 같은 스마트 포인터를 구현하는 것이 좋습니다. (여기 [http://loki-lib.sourceforge.net/html /a00045.html) 참조). – user0042