문제

레거시 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 차이 일뿐입니다 - 당신은 방법을 별도로 구현할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top