Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

СОМ-сервер вернуть коллекцию.

Здравствуйте Все,

Проблема, не могу придумать как реализовать метод СОМ-сервера,
который бы возвращал коллекцию объектов.

Ответить   Mon, 17 Apr 2006 13:15:00 +0600 (#538582)

 

Ответы:

Шистеров Павел пишет:

Возвращай, что-нибудь типа:
ICollection = interface
function Count: Integer;
function Item: IItem; (или даже IUnknown)
end;

Ответить   Mon, 17 Apr 2006 15:01:51 +0700 (#538867)

 

Шистеров Павел пишет:

сорри, поспешил...

Возвращай, что-нибудь типа:
ICollection = interface
function Count: Integer;
function Item(Index: Integer): IItem; (или даже IUnknown)
end;

Ответить   Mon, 17 Apr 2006 15:02:39 +0700 (#538910)

 

Здравствуйте, Komkov,

Это-то понятно, что нужно описать интерфейс коллекции. А вот как
реализовать что-бы именно возвращалось?

В голову приходят следующие шаги:
1. Описать интерфейс IMyCollection
2. В методе возвращения данных создать объект IMyCollection - сформировать данные
3. Присвоить результату указатель на этот объект или Интерфейс?

Прально?

Ответить   Tue, 18 Apr 2006 08:28:51 +0600 (#538989)

 

Шистеров Павел пишет:

Мне не совсем понятна ситуация. У тебя коллекция Объектов3 содержится в
Объект1 или формируется по запросу клиента?
Если первое, то ты просто можешь отобразить методы доступа к коллекции
Объекта1 на интерфейс IMyCollection.
Если второе, то или создать коллекцию внутри Объект1 и опять-же
отобразить методы доступа к ней на интерфейс IMyCollection. или создать
вспомогательный объект с интерфейсом IMyCollection, заполнить и отдать
его интерфейс.

У меня подозрение, что ты малость не понимаешь смысл интерфейсов.
Интерфейс, это вроде public части класса. Может тебе Роджерса "Основы
COM" прислать?

Ответить   Tue, 18 Apr 2006 10:16:32 +0700 (#539320)

 

Здравствуйте, Komkov,

данные

Давай так. Возможно я не правильно определяю для себя задачу.
Т.е. первая цель создать СОМ-сервер, который -бы что-то мне возвращал.
Но это, как я понял, неверно. Отходить нужно от требований, а
СОМ-сервер - это просто реализация. Ну уж больно я на нем зациклился.

Второе, делаю я в Дельфи. Инструмент создания объектов автоматизации
там удобный, возможно поэтому я и не понял до конца сути.
Т.е. получается я изначально создаю ИНТЕРФЕЙС, а нужно создать классы,
а интерфейс - это просто оболочка для классов. Правильно?

Третье. Сам по себе интерфейс - ничто. он должен быть связан с
классом. Поэтому создается интерфейсный класс, который включает в себя
реализованный класс и один или несколько интерфейсов (не совсем
понятно). Назначение этого класса - создание объектов класса и связь
интерфейсных объявлений с созданным объектом.
Правильно?

Это точно. Сначала считал, что все понятно, теперь понимаю что ничего
не понятно.

Не надо, есть. Только еще не читал... чуствую надо. :)

Ответить   Wed, 19 Apr 2006 12:42:00 +0600 (#539567)

 

Здравствуйте, Шистеров!

Создавай класс коллекции, получай на него интерфейс и отдавай его. В чем
проблема? Класс сам удалиться после того, как им закончат пользоваться.

Ответить   Wed, 19 Apr 2006 11:54:19 +0400 (#539597)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539922)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539923)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539924)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539925)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539926)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539927)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539928)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539929)

 

Здравствуйте, Andrew,

Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?

Ответить   Thu, 20 Apr 2006 09:28:37 +0600 (#539930)

 

Шистеров Павел пишет:

Интерфейс это просто декларация, что класс предоставляет некотрый набор
методов. Почти как секция в объявлении класса.
Почитай, вот это http://olegmotov.h1.ru/articles/InterfacesRevisited/toc.htm

Промежуточный класс не обязателен. Можно и сразу добавить интерфейс в
реализованный класс.**

Ответить   Wed, 19 Apr 2006 19:16:29 +0700 (#539799)

 

Здравствуйте, Komkov,

Это я и имел ввиду, просто слово не то взял. :))

Т.е. сделать класс интерфейсным?
Хмм... буду думать!

Ответить   Thu, 20 Apr 2006 09:26:00 +0600 (#539921)

 

Здравствуйте, Шистеров Павел!

Я бы порекомендовал прочесть [только] первую главу книги Дональда Бокса
"Сущность технологии COM"

PS:
Может все-таки разберетесь с глюками почты...

С уважением, AleX

Номер выпуска : 5281
Возраст листа : 942 (дней)
Количество подписчиков : 545
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/539998
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Thu, 20 Apr 2006 11:56:40 +0400 (#539998)

 

Здравствуйте, Komkov,

Проблем даже больше. Все из-за того, что никак не могу понять СОм и
Интерфейсы с точки зрения реализации.

1. Нужно описать интерфейсы Icollection и IItem, затем реализовать их.
Тут первый затык, что-то не могу врубиться как это сделать. Объекты
автоматизации создал, а нужно-ли это?
2. Как реализовать объекты - тоже ума не приложу. По логике вещей
можно использовать готовые классы TCollection и TCollectionItem.
А как?

Вот самое основное!

Ответить   Tue, 18 Apr 2006 09:15:16 +0600 (#539000)

 

Шистеров Павел пишет:

Нет, тебе точно нужен Роджерс!!!

Давно я с COM не работал :( Насколько помню, объект автоматизации, это
COM объект, который реализует интерфейс IDispatch. Если ты не
собираешься использовать свой сервер из чего-то, типа VB или JS то не нужно.

Описать свой интерфейс, унаследоватся от TCollection, объявить что класс
реализует этот интерфейс и отобразить методы интерфейса на методы класса.

Ответить   Tue, 18 Apr 2006 10:55:10 +0700 (#539323)