COM 인터페이스 (IDL)를 올바르게 확장
문제
레거시 C ++ 코드로 작업 중이며 인터페이스를 확장해야합니다. 현재 인터페이스는 예를 들어 다음과 같습니다.
[
object,
uuid(guid),
version(1.0),
dual,
nonextensible,
oleautomation
]
interface IInfo : ITask {
// Methods here
}
[
object,
uuid(guid),
version(1.0),
dual,
nonextensible,
oleautomation
]
interface IExtendedInfoTask : IInfo {
// Methods here
}
내가 확장하고 싶은 것은 IINFO 인터페이스입니다. 이제 올바른 방법을 이해하면 IINFO 인터페이스를 상속하는 IINFO2 인터페이스를 작성하는 것이지만,이 IINFO2에서 상속하려면 iePtendendendInfotask가 필요합니다. 현재 상속 재산을 변경하면 기존 인터페이스가 깨질 수 있습니까?
이 작업을 수행하는 올바른 방법이 IENFO2를 확장하고 IEPTENDENDINFOTASK의 메소드를 복제하는 IEXtendedInfotask를 작성하는 것입니까?
해결책
이를 수행하는 올바른 방법은 새로운 IINFO2 인터페이스를 확장하는 eextendedInfotask2를 만드는 것입니다. com은 한 번 정의 된 인터페이스가 불변이 불변이어야합니다.
동일한 클래스가 iextendedInfotask 및 extendendinfotask2를 모두 구현할 수 있으므로 발신자는 어느 버전 중 하나를 사용할 수 있습니다. 그것은 단지 vtable 차이 일뿐입니다 - 당신은 방법을 별도로 구현할 필요가 없습니다.
제휴하지 않습니다 StackOverflow