ATL/COM:我可以在同一对象的两个不同接口中使用相同的函数吗?

ATL/COM:我可以在同一对象的两个不同接口中使用相同的函数吗?,com,interface,atl,Com,Interface,Atl,我有一个基于ATL/COM的DLL,用VC++6.0编写。直到最近,我的COM接口和类之间还存在一对一的对应关系。例如,假设有一个ICar接口;然后还有一个实现它的CCar类,除了CCar没有其他类实现ICar,除了ICar,CCar没有实现(我的)接口。类似地,IPlane和CPlane。定义可能类似于: ICar具有“StepOnGas”和“MaxPassents”功能;IPlane具有“降档”和“最大乘客”功能 最近,我修改了它,这样就有了一个IVehicle接口,它没有相应的CVehic

我有一个基于ATL/COM的DLL,用VC++6.0编写。直到最近,我的COM接口和类之间还存在一对一的对应关系。例如,假设有一个ICar接口;然后还有一个实现它的CCar类,除了CCar没有其他类实现ICar,除了ICar,CCar没有实现(我的)接口。类似地,IPlane和CPlane。定义可能类似于:

ICar具有“StepOnGas”和“MaxPassents”功能;IPlane具有“降档”和“最大乘客”功能

最近,我修改了它,这样就有了一个IVehicle接口,它没有相应的CVehicle类,CCar和CPlane都实现了它。因此:

ICar有“StepOnGas”;IPlane具有“低起落架”;IVehicle有“最大乘客”。CCar实施ICar和IVehicle;CPlane实现IPlane和IVehicle

这很好,但从DLL客户端的角度来看,这有点痛苦;他们有一辆ICar,他们想知道它能载多少乘客。以前,他们可以直接问;现在,在他们提出要求之前,他们必须跳过把它变成IVehicle的圈套

所以我想做的更多的是沿着这条路线:

ICar有“StepOnGas”和“MaxPassents”;IPlane有“低起落架”和“最大乘客”;IVehicle有“最大乘客”。CCar仍然实现ICar和IVehicle,CPlane仍然实现IPlane和IVehicle

我希望CCar有一个且只有一个“最大乘客”,并且可以从ICar和IVehicle访问;同样,CPlane只有一个“MaxPassentials”,可从IPlane和IVehicle访问

这会引起什么问题吗?除了在ICar和IPlane的IDL中添加“MaxPassentials”之外,我还需要做其他具体的事情吗

如果有必要,这个DLL的客户端都是用VC++6.0和VB6编写的


提前感谢您的帮助。

简单回答:可以

更好的是:为什么不从IVehicle继承ICar,也就是说,您可以使用新方法扩展IVehicle并将其命名为ICar。通过这种方式,您的对象可以同时用于两个接口,并且ICar将拥有客户端操作对象所需的所有方法。这也允许ICAR被升级到iBoover,所以两个接口都可以共享一个实现(即访问ICAR和IMALL上的Max乘客执行相同的C++方法)。
IPlane也一样,但扩展将包括不同的方法。

噢,那太棒了。我不知道你能在IDL里做到这一点。我将研究出实现它的语法。非常感谢!