Текущий архив: 2006.07.16;
Скачать: CL | DM;
ВнизНужно ли создавать новый интерфейс? Найти похожие ветки
← →
S@shka © (2005-07-22 14:35) [0]Есть интерфейс, который используется. Я хочу добавить в него новые методы (исключительно добавить). Нужнно ли для этого создавать новый интефейс типа MyInterface2 или же можно добавить методы в реализации старого интер-са.
← →
just_me (2005-07-22 15:54) [1]Создать новый.
Цитата мз MSDN:
Interfaces are immutable. COM interfaces are never versioned, which means that version conflicts between new and old components are avoided. A new version of an interface, created by adding more functions or changing semantics, is an entirely new interface and is assigned a new unique identifier.
← →
isasa © (2005-07-23 12:25) [2]Ну а почему не попробовать.
Открыть проект ATL (если она написана на D.
View -> View type library.
Выбираем нужный интерф. и вперед.
← →
S@shka © (2005-07-23 17:54) [3]Можно то можно, а было интересно - как это делать правильно.
Конечно все бы заработало - но есно внесло бы неразбериху.
Спасибо за цитату из MSDN )
← →
isasa © (2005-07-23 23:36) [4]Если вспомнить первоначальную идею о модульности и возможности развития, то любое добавление методов в уже существующий интерф. - правильно.
Кроме того, существует механизм использования разных версий интерфейса <интерф>MajorVersion, <интерф>MinorVersion.
Вызов CreateOleObject("FlowSrvr.IProperty") и CreateOleObject("FlowSrvr.IProperty.1") - могут вернуть разные интерф.
← →
Набережных С (2005-07-25 19:58) [5]
> S@shka ©
Один из главных постулатов СОМ - единожды опубликованный интерфейс не может быть изменен ни в коем случае. Если нужно внести изменения/дополнения, то необходимо выпустить новую версию интерфейса, с новым GUID. Нсоблюдение данного правила приведет к тому, что клиентский код не сможет работать с двумя объектами, реализующими разные версии якобы одного и того же интерфейса. Это очевидно.
> isasa © (23.07.05 23:36) [4]
Не следует путать понятия интерфейса и его реализации.
Вызов CreateOleObject("FlowSrvr.IProperty") и CreateOleObject("FlowSrvr.IProperty.1") МОГУТ вернуть ВОЗМОЖНО разные, а может и одинаковые интерфейсы РАЗНЫХ ОБЪЕКТОВ. Символьное имя интерфейса необязательно и не требует строгой уникальности. Интерфейс идентифицируется только его GUID, а вот он уже не может быть одинаковым у двух семантически разных интерфейсов. Строка-параметр в CreateOleObject идентифицирует как раз таки объект, но никак не интерфейс, эта функция всегда возвращает и IDispatch.
Страницы: 1 вся ветка
Текущий архив: 2006.07.16;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.009 c