다음을 통해 공유


여러 개의 이중 인터페이스

이중 인터페이스의 장점(즉, vtable 및 지연 바인딩의 유연성)을 결합하여 클래스를 스크립팅 언어와 C++에 사용할 수 있도록 여러 상속 기술을 사용할 수 있습니다.

단일 COM 개체에 여러 이중 인터페이스를 노출할 수 있지만 권장되지는 않습니다. 이중 인터페이스가 여러 개 있는 경우 하나의 IDispatch 인터페이스만 노출되어야 합니다. 이 경우 함수 손실 또는 코드 복잡성 증가와 같은 처벌을 수행하는 데 사용할 수 있는 기술입니다. 이 방법을 고려하는 개발자는 장점과 단점을 신중하게 고려해야 합니다.

단일 IDispatch 인터페이스 노출

둘 이상의 특수화에서 파생하여 단일 개체에 여러 이중 인터페이스를 노출할 수 있습니다 IDispatchImpl. 그러나 클라이언트가 인터페이스를 IDispatch 쿼리하도록 허용하는 경우 COM_INTERFACE_ENTRY2 매크로(또는 COM_INTERFACE_ENTRY_IID)를 사용하여 구현IDispatch에 사용할 기본 클래스를 지정해야 합니다.

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

하나의 IDispatch 인터페이스만 노출되므로 인터페이스를 통해서만 개체에 IDispatch 액세스할 수 있는 클라이언트는 다른 인터페이스의 메서드 또는 속성에 액세스할 수 없습니다.

여러 이중 인터페이스를 IDispatch의 단일 구현으로 결합

ATL은 여러 이중 인터페이스를 단일 구현 IDispatch으로 결합하는 것을 지원하지 않습니다. 그러나 인터페이스를 수동으로 결합하는 몇 가지 알려진 방법이 있습니다. 예를 들어 별도의 IDispatch 인터페이스의 합집합을 포함하는 템플릿 클래스를 만들거나, 함수를 수행할 QueryInterface 새 개체를 만들거나, 중첩된 개체의 typeinfo 기반 구현을 사용하여 인터페이스를 만듭니 IDispatch 다.

이러한 접근 방식에는 잠재적인 네임스페이스 충돌과 코드 복잡성 및 유지 관리 효율성에 문제가 있습니다. 여러 이중 인터페이스를 만드는 것은 권장되지 않습니다.

참고 항목

이중 인터페이스 및 ATL