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

Здравствуйте Все,
Проблема, не могу придумать как реализовать метод СОМ-сервера,
который бы возвращал коллекцию объектов.
← Апрель 2006 → | ||||||
1
|
2
|
|||||
---|---|---|---|---|---|---|
3
|
4
|
5
|
6
|
7
|
8
|
|
12
|
15
|
|||||
За последние 60 дней ни разу не выходила
Сайт листа:
http://codeguru.ru
Открыт:
21-09-2003
Пре-модерация: Нет
Адрес для писем в лист: comp.soft.prog.prog-list@subscribe.ru
Адрес
модератора: comp.soft.prog.prog-owner@subscribe.ru
Здравствуйте Все,
Проблема, не могу придумать как реализовать метод СОМ-сервера,
который бы возвращал коллекцию объектов.
Шистеров Павел пишет:
сорри, поспешил...
Возвращай, что-нибудь типа:
ICollection = interface
function Count: Integer;
function Item(Index: Integer): IItem; (или даже IUnknown)
end;
Здравствуйте, Komkov,
Это-то понятно, что нужно описать интерфейс коллекции. А вот как
реализовать что-бы именно возвращалось?
В голову приходят следующие шаги:
1. Описать интерфейс IMyCollection
2. В методе возвращения данных создать объект IMyCollection - сформировать данные
3. Присвоить результату указатель на этот объект или Интерфейс?
Прально?
Шистеров Павел пишет:
Мне не совсем понятна ситуация. У тебя коллекция Объектов3 содержится в
Объект1 или формируется по запросу клиента?
Если первое, то ты просто можешь отобразить методы доступа к коллекции
Объекта1 на интерфейс IMyCollection.
Если второе, то или создать коллекцию внутри Объект1 и опять-же
отобразить методы доступа к ней на интерфейс IMyCollection. или создать
вспомогательный объект с интерфейсом IMyCollection, заполнить и отдать
его интерфейс.
У меня подозрение, что ты малость не понимаешь смысл интерфейсов.
Интерфейс, это вроде public части класса. Может тебе Роджерса "Основы
COM" прислать?
Здравствуйте, Komkov,
данные
Давай так. Возможно я не правильно определяю для себя задачу.
Т.е. первая цель создать СОМ-сервер, который -бы что-то мне возвращал.
Но это, как я понял, неверно. Отходить нужно от требований, а
СОМ-сервер - это просто реализация. Ну уж больно я на нем зациклился.
Второе, делаю я в Дельфи. Инструмент создания объектов автоматизации
там удобный, возможно поэтому я и не понял до конца сути.
Т.е. получается я изначально создаю ИНТЕРФЕЙС, а нужно создать классы,
а интерфейс - это просто оболочка для классов. Правильно?
Третье. Сам по себе интерфейс - ничто. он должен быть связан с
классом. Поэтому создается интерфейсный класс, который включает в себя
реализованный класс и один или несколько интерфейсов (не совсем
понятно). Назначение этого класса - создание объектов класса и связь
интерфейсных объявлений с созданным объектом.
Правильно?
Это точно. Сначала считал, что все понятно, теперь понимаю что ничего
не понятно.
Не надо, есть. Только еще не читал... чуствую надо. :)
Здравствуйте, Шистеров!
Создавай класс коллекции, получай на него интерфейс и отдавай его. В чем
проблема? Класс сам удалиться после того, как им закончат пользоваться.
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Здравствуйте, Andrew,
Хмм, а поподробнее, пожалуйста, а то я что-то запутался.
Имеется ввиду создать класс коллекция. Создать интерфейсный класс,
который связывает класс-коллекцию с интерфейсом. И создать интерфейс?
Что значит "Получай на него интерфейс"?
Шистеров Павел пишет:
Интерфейс это просто декларация, что класс предоставляет некотрый набор
методов. Почти как секция в объявлении класса.
Почитай, вот это http://olegmotov.h1.ru/articles/InterfacesRevisited/toc.htm
Промежуточный класс не обязателен. Можно и сразу добавить интерфейс в
реализованный класс.**
Здравствуйте, Komkov,
Это я и имел ввиду, просто слово не то взял. :))
Т.е. сделать класс интерфейсным?
Хмм... буду думать!
Здравствуйте, Шистеров Павел!
Я бы порекомендовал прочесть [только] первую главу книги Дональда Бокса
"Сущность технологии 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
Здравствуйте, Komkov,
Проблем даже больше. Все из-за того, что никак не могу понять СОм и
Интерфейсы с точки зрения реализации.
1. Нужно описать интерфейсы Icollection и IItem, затем реализовать их.
Тут первый затык, что-то не могу врубиться как это сделать. Объекты
автоматизации создал, а нужно-ли это?
2. Как реализовать объекты - тоже ума не приложу. По логике вещей
можно использовать готовые классы TCollection и TCollectionItem.
А как?
Вот самое основное!
Шистеров Павел пишет:
Нет, тебе точно нужен Роджерс!!!
Давно я с COM не работал :( Насколько помню, объект автоматизации, это
COM объект, который реализует интерфейс IDispatch. Если ты не
собираешься использовать свой сервер из чего-то, типа VB или JS то не нужно.
Описать свой интерфейс, унаследоватся от TCollection, объявить что класс
реализует этот интерфейс и отобразить методы интерфейса на методы класса.
Шистеров Павел пишет:
Возвращай, что-нибудь типа:
ICollection = interface
function Count: Integer;
function Item: IItem; (или даже IUnknown)
end;