Одно из правил COM гласит - нельзя изменять интерфейсы. Это правило основано на следующей идее. Допустим, Вы создаете COM объект, который умеет обращаться к базе данных и получать необходимую Вам цифру. Например, с интерфейсом IGetNumber. Этот интерфейс возвращает Вам число, например котировку $USA. Для этого элемента COM создается клиент, который умеет использовать этот интерфейс. Он спокойно обращается к IGetNumber и получаем число.
Вы создаете новый COM объект который будет возвращать не только число но и массив чисел. Что нужно сделать. Правило - Интерфейс менять нельзя. Значит нужно создать новый интерфейс IGetNumber1 который будет реализовывать новые возможности. Соответственно старый клиент будет пользоваться старым интерфейсом а новый и старым и новым если нужно, или просто новым. Если же новый клиент будет получен раньше чем новый COM то он просто не будет иметь новых возможностей.
Вы можете реально увидеть, что в жизни так и происходит. Вот, например объект Application из MS Office имеет два интерфейса Run.
_Application::Run _Application::_Run2
Такое же повторение Вы можете найти если будут использовать объект Exploler. Там есть метод Navigate, Navigate2 и так далее.
Это правило сделано для совместной работы COM. Ведь действительно на данный момент разрабатываться COM объекты чуть ли не по всему миру. И представьте, что будут произвольно меняться интерфейсы. Все старые клиенты просто перестанут работать, а этого допустить нельзя. Кроме специальных целей естественно. Ну, например Вы поставляете и COM объекты и клиентов вместе. Если Вы не хотите что бы Вашими объектами пользовались другие очень даже неплохой выход менять интерфейсы в каждой новой версии. Но наверно есть другие методы защиты более эффективные.