У меня есть библиотека на основе ATL / COM, написанная на VC ++ 6.0. До недавнего времени между COM-интерфейсами и классами существовало однозначное соответствие. Например, скажем, был интерфейс ICar; затем был также класс CCar, который реализовал его, и никакой класс, кроме CCar, не реализовал ICar, и CCar не реализовал никакого (моего) интерфейса, кроме ICar. Точно так же, IPlane и CPlane. Определения могут быть что-то вроде:
ICar имел функции «StepOnGas» и «MaxPassengers»; IPlane имеет функции «LowerLandingGear» и «MaxPassengers».
Недавно я изменил его так, чтобы появился интерфейс IVehicle, у которого нет соответствующего класса CVehicle, и который реализуют и CCar, и CPlane. Итак:
ICar имеет "StepOnGas"; IPlane имеет «LowerLandingGear»; У машины есть «Макс Пассажиры». CCar реализует ICar и IVehicle; CPlane реализует IPlane и IVehicle.
Это работает нормально, но это немного болезненно с точки зрения клиента DLL; у них есть ICar, и они хотят знать, сколько пассажиров он может держать. Раньше они могли просто спросить это; теперь им нужно прыгнуть через обруч, чтобы превратить его в автомобиль, прежде чем они смогут его спросить.
Итак, я хотел бы сделать следующее:
ICar имеет «StepOnGas» и «MaxPassengers»; IPlane имеет «LowerLandingGear» и «MaxPassengers»; У машины есть «Макс Пассажиры». CCar по-прежнему использует и ICar, и IVehicle, а CPlane по-прежнему использует как IPlane, так и IVehicle.
Я хочу, чтобы для CCar был один-единственный "MaxPassengers", и он был доступен как из ICar, так и из IVehicle; аналогично, один и только один «MaxPassengers» для CPlane, и он доступен как для IPlane, так и для IVehicle.
Это может вызвать проблемы? Должен ли я сделать что-то конкретное, кроме простого добавления «MaxPassengers» в IDL для ICar и IPlane?
В случае, если это имеет значение, клиенты этой DLL написаны как на VC ++ 6.0, так и на VB6.
Заранее спасибо за любую помощь.