Дано :
COM+ , написанный на .net (C#) (SomeComponent)
Реализует некий интерфейс (ISomeFace) + есть методы вне интерфейсов.
Пытаемся его юзать из дельфи.
Делаем — Import TLB, появляется SomeConponent_TLB.pas,
который подключается к проекту.
В этой tlb-хе описаны все интерфейсы + интерфейс SomeConponent_ ,
в котором есть *все* методы и свойства — как "интерфейсные", так и нет.
Пытаемся работать именно с SomeConponent_ :
-получаем инстанс, всё ок.
-зовём методы "вне интерфейсов" — всё ок
-зовём "методы интерфейсов" — вылетает ошибка
'Object reference not set to an instance of an object'.
Чешем репу.
Кастим SomeConponentInstance as ISomeFace , вызываем интерфейсные
методы — всё ок.
Где собака порылась?
Или по "правилам хорошего тона" необходимо работать *только* через интерфейсы,
"неинтерфейсных" методов и свойств в COM\COM+ быть не должно?
Если совсем элементарный вопрос — скажите чего RTFM-ить ?
DA>Или по "правилам хорошего тона" необходимо работать *только* через интерфейсы,
DA>"неинтерфейсных" методов и свойств в COM\COM+ быть не должно?
DA>Если совсем элементарный вопрос — скажите чего RTFM-ить ?
Неинтерфейных методов в COM не то, что бы не должно, а не бывает, так что если ты их видешь в библиотеке типов, то они уже обьяылены в каком то интерфейсе
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Tom, Вы писали:
DA>>Или по "правилам хорошего тона" необходимо работать *только* через интерфейсы,
DA>>"неинтерфейсных" методов и свойств в COM\COM+ быть не должно?
DA>>Если совсем элементарный вопрос — скажите чего RTFM-ить ?
Tom>Неинтерфейных методов в COM не то, что бы не должно, а не бывает, так что если ты их видешь в библиотеке типов, то они уже обьяылены в каком то интерфейсе
Судя по всему — суррогатные интерфейсы(в моём примере SomeConponent_ ) лепятся на всё, что унаследовано от ServicedComponent в .net и имеет модификатор public.
Но работает это как то кривовасто...
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, DmitryAxe, Вы писали:
DA>>Судя по всему — суррогатные интерфейсы(в моём примере SomeConponent_ ) лепятся на всё, что унаследовано от ServicedComponent в .net и имеет модификатор public.
DA>>Но работает это как то кривовато...
Vi2>Почему кривовато, имхо, нормально. Можешь смотреть на Net-класс как на еще один интерфейс. SomeComponent определяет свой интерфейс SomeComponent_ (может быть назван по-разному, SomeComponent_, _SomeComponent и т.п.), в котором определены все public члены класса (так называемые тобой "методы вне интерфейсов").
Угу, это я понял — обозвал "суррогатным интерфейсом" выше
Мало того что он выносит public-члены того класса,который я от ServicedComponent унаследовал,
он вообще лепит интерфейсы ко всем классам, объявленным как public в неймспейсе библиотеки!
С одной стороны как бы удобно-с другой вносит некоторую путаницу...
Vi2>А автоматического перехода с интерфейса на интерфейс СОМ не делает. Для этого есть ручной QueryInterface (или каст "As", или Set). Поэтому объект и не вызывает методы интерфейсов, потому что в интерфейсе самого объекта этих методов нет.
Буду знать.
А чего можно умного почитать по использованию COM\COM+ в .net ?
У нас солянка сборная — часть на delphi,часть на .net пишет и хотелось бы избежать
геморроя на взаимодействиях.