【发布时间】:2013-07-03 11:52:31
【问题描述】:
我一直在向 COM 接口添加新功能,从我所读到的唯一方法(并保持向后兼容)是创建一个继承旧接口并添加新方法的新接口。我试过这样做,但我的层次结构已经很复杂了。
说这就是我目前的界面:
基础接口 | 衍生接口我想为基础接口添加一些功能,现在看起来像这样:
IBaseOld接口 | 基础接口 | 衍生接口因为我已经添加了这个新功能,我需要创建一个新的 IDerivedInterface 吗?我已经按照目前的方式进行了尝试,但它似乎不适用于所有情况。
我真的想要一些确认,如果可能的话,解释一下为什么
我需要进一步解释我的理想情况是什么以及为什么:
我想向 IBaseInterface 类添加一些方法,以便所有派生类都可以使用。我认为可能是这样的:
IBaseOld接口 / \ IDerivedOldInterface IBaseNewInterface \ / IDerivedNew接口我知道应该避免 Diamond 继承,但它们只是接口,所以我认为没关系。
当用户请求 INewDerivedInterface 之一时,具有这种新结构。查询接口将返回该 IID 的正确接口,无论是 INewDerivedInterface 还是 IOldDerivedInterface。
【问题讨论】:
-
更改接口的 IID 至关重要。因此,您不会有对更改的界面一无所知的旧代码尝试使用新服务器。并且不要忘记一个 coclass 可以实现任意数量的接口,它们不必相互继承。
-
我已经添加了关于我认为需要什么的进一步解释。所有标有“旧”的接口仍然具有与以前相同的 IID,只有新接口生成了新的 IID
标签: c++ com c++builder