При создании интерфейса создается IID. Давайте посмотрим на это, а для этого создадим COM DLL. Я создал с именем проекта Forward и именем класса ClassForward. В нем я создал один метод. Собираем DLL. Сразу ставим бинарную совместимость для того, чтобы дальше тестировать. Идем и находим запись в реестре. На данный момент она выглядит так:
А теперь добавим метод и соберем заново, смотрим реестр.
Ага, появилась запись Forward, то есть "вперед", нас отправляют по другому адресу.
Если добавить еще один метод, то нас отправят еще дальше:
Вот так и достигается бинарная совместимость, перенаправлением IID по другому адресу. Он каждый раз генерируется заново, но в реестр добавляется запись Forward для перенаправления. Данная реализация обходит некоторые правила COM, поэтому лучше создавать новый интерфейс для изменения функциональности или улучшения.