適切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インターフェースを作成することです、しかし、私は私のIExtendedInfoTaskこのIInfo2から継承する必要があります。現在の継承を変更すると、既存のインタフェースを破るだろう、それはない?
これを行うための適切な方法は、IInfo2を拡張し、IExtendedInfoTaskの方法を複製することIExtendedInfoTaskを作成することでしょうか?
解決
これを行うための適切な方法は、新しいIInfo2インタフェースを拡張IExtendedInfoTask2を作成することです。 COMは、一度定義されたインタフェースは、不変であることが必要です。
あなたはIExtendedInfoTaskとIExtendedInfoTask2の両方を実装する同じクラスを持つことができるので、呼び出し側は、バージョンのいずれかを使用することができます。それが唯一のvtableの違いだ - あなたは個別のメソッドを実装する必要はありません。
。所属していません StackOverflow