Вызов COM+ (.net) из Delphi - глюк или RTFM?
От: DmitryAxe  
Дата: 10.11.05 05:23
Оценка:
Дано :

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-ить ?
Re: Вызов COM+ (.net) из Delphi - глюк или RTFM?
От: Tom Россия http://www.RSDN.ru
Дата: 10.11.05 08:03
Оценка:
DA>Или по "правилам хорошего тона" необходимо работать *только* через интерфейсы,
DA>"неинтерфейсных" методов и свойств в COM\COM+ быть не должно?
DA>Если совсем элементарный вопрос — скажите чего RTFM-ить ?

Неинтерфейных методов в COM не то, что бы не должно, а не бывает, так что если ты их видешь в библиотеке типов, то они уже обьяылены в каком то интерфейсе
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Народная мудрось
всем все никому ничего(с).
Re[2]: Вызов COM+ (.net) из Delphi - глюк или RTFM?
От: DmitryAxe  
Дата: 10.11.05 08:11
Оценка:
Здравствуйте, Tom, Вы писали:

DA>>Или по "правилам хорошего тона" необходимо работать *только* через интерфейсы,

DA>>"неинтерфейсных" методов и свойств в COM\COM+ быть не должно?
DA>>Если совсем элементарный вопрос — скажите чего RTFM-ить ?

Tom>Неинтерфейных методов в COM не то, что бы не должно, а не бывает, так что если ты их видешь в библиотеке типов, то они уже обьяылены в каком то интерфейсе


Судя по всему — суррогатные интерфейсы(в моём примере SomeConponent_ ) лепятся на всё, что унаследовано от ServicedComponent в .net и имеет модификатор public.

Но работает это как то кривовасто...
Re[3]: Вызов COM+ (.net) из Delphi - глюк или RTFM?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 10.11.05 08:31
Оценка: 3 (1)
Здравствуйте, DmitryAxe, Вы писали:

DA>Судя по всему — суррогатные интерфейсы(в моём примере SomeConponent_ ) лепятся на всё, что унаследовано от ServicedComponent в .net и имеет модификатор public.


DA>Но работает это как то кривовато...


Почему кривовато, имхо, нормально. Можешь смотреть на Net-класс как на еще один интерфейс. SomeComponent определяет свой интерфейс SomeComponent_ (может быть назван по-разному, SomeComponent_, _SomeComponent и т.п.), в котором определены все public члены класса (так называемые тобой "методы вне интерфейсов").

А автоматического перехода с интерфейса на интерфейс СОМ не делает. Для этого есть ручной QueryInterface (или каст "As", или Set). Поэтому объект и не вызывает методы интерфейсов, потому что в интерфейсе самого объекта этих методов нет.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Вызов COM+ (.net) из Delphi - глюк или RTFM?
От: DmitryAxe  
Дата: 10.11.05 09:57
Оценка:
Здравствуйте, 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 пишет и хотелось бы избежать
геморроя на взаимодействиях.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.