1

いくつかのレガシー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から継承するにはIExtendedInfoTaskが必要です。現在の継承を変更すると、既存のインターフェイスが壊れますか?

これを行う適切な方法は、IInfo2を拡張してIExtendedInfoTaskのメソッドを複製するIExtendedInfoTaskを作成することでしょうか?

4

1 に答える 1

8

これを行う適切な方法は、新しいIInfo2インターフェイスを拡張するIExtendedInfoTask2を作成することです。COMでは、インターフェイスが定義されると、不変である必要があります。

同じクラスにIExtendedInfoTaskとIExtendedInfoTask2の両方を実装させることができるため、呼び出し元はどちらのバージョンも使用できます。これはvtableの違いにすぎません。メソッドを個別に実装する必要はありません。

于 2009-12-08T15:23:17.337 に答える