Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Interface


Страницы:   1 2

Dragon21 ©   (2004-09-30 14:28:00) 

Привет всем. У меня есть IInterface который я получаю из DLL (чужой), мне требуется его сохранить в stream. У полученного интерфейса такого метода нет, я делал преобразование в IDockManager, у него есть метод SaveToStream. Но при выполнении этого метода падает DLL. Я понимаю что при преобраховании передается только pointer. Но как это обойти не знаю. Может кто сталкивался с подобной проблемой, поделитесь как можно решить эту проблему?


Суслик   (2004-09-30 16:05:00) [21]


> [13] Digitman ©   (30.09.04 15:58)

А разве обзана бибилиотека типов или OleView показывать все реализованные объектами интерфейсы?

Например, если я делаю com с интерфейсом IMyInt, но реализую у объекта кроме IMyInt еще IStream, разве бибилиотека типов или OleView покажет, что мой объект еще поддерживает IStream?


Суслик   (2004-09-30 16:03:00) [22]

В добавку к [13]
можешь сам импортировать библиотеку типов. См. project\import type library


Digitman   (2004-09-30 15:58:00) [23]


> Dragon21


эта библиотека, надо понимать, реализует OLE/COM-сервер автоматизации ? если так, то как правило разработчик поставляет библиотеку типов, включенную либо в тело самой библ-ки (в виде ресурса TYPELIB) либо в виде отдельного одноименного файла с расширением TLB

и в том и в ином случае библиотека типов может быть просмотрена, например, утилитой OleView (из состава MS VisStudio) на предмет детального изучения интерфейсов, предоставляемых сервером, как правило нормальный разработчик для каждого метода помещает краткое его описание (и описание параметров)


Суслик   (2004-09-30 15:47:00) [24]


> просто наверное это тупиковая ветвь решения

Пока не исчерпаешь источники информации о реализуемых интерфейсах утверждать так нельзя.


Dragon21   (2004-09-30 15:43:00) [25]

Да много всего уже нашел, просто наверное это тупиковая ветвь решения, надо искать другое.


Суслик   (2004-09-30 15:07:00) [26]

В общем то совет я тебе уже дал - ищи доку к библиотеке, которой пользуешься. Целенаправленно ищи информацию о других интерфейсах, которые реализуют объекты.


Суслик   (2004-09-30 15:05:00) [27]

Я вот, что не понимаю, что значит фраза

"а потом прокручивать все дерево для его поиска очень не хочется"

Где прокручивать? На другом компе? Так там есть уже данные?
Если нет, что что прокручивать?


Dragon21   (2004-09-30 15:03:00) [28]

Если бы знал не спрашивал бы:-) Так что обид никаких.
можно и подробнее. Изменяется файл, в VSS, мне нужно сохранить его в базе, чтобы затем прочитать на другом компе именно эту версию, для того, чтобы запустить автоматическую сборку проекта. Возможно я пошел совсем не по тому пути, и сохранять надо по каким то другим признакам, просто с тупую сохранять имя, а потом прокручивать все дерево для его поиска очень не хочется, но если не найду другого способа, буду делать именно так. Попытка найти файл сразу по имени, мне тоже не удалась, так как приходится прокручивать все дерево VSSа и проверять имя файла и его путь. хочется более оптимальное решение.


Суслик   (2004-09-30 14:55:00) [29]


>  [6] Dragon21   (30.09.04 14:49)

Извини, но ты не очень понимаешь о чем говоришь. Без обид.
Интерфейс сохранить нельзя. У интерфейса ничего нет (нет данных). Он всего лишь интерфейс. Данные содержатся в объекте, к которому предоставляется этим интерфейсом доступ. Если тебе интерфейс ничего не говорит о данных объекта, то у тебя нет шансов его заставить это сказать. Но часто бывает так, что один объект реализует фигову тучу интерфейсов. Некая бибилиотека предоставляет тебе один интерфейс. Но ты можешь его преобразовать к другому. Но ты должен знать к какому! Откуда знать? Из документации. Ищи.

ЗЫ.
В свете твоего поста [6] у меня возникло ощущение, что тебе лучше подробней описать задачу :))


Dragon21   (2004-09-30 14:49:00) [30]

Моя задача сохранить этот интерфейс, если просто сохранить имя, то потом найти его будет сложно, поэтому и хотелось иметь сразу этот интерфейс, чтобы быстро получить доступ к этому объекту.


Суслик   (2004-09-30 14:48:00) [31]


> Вот только способ найти не могу.

Тебе надо искать доку на тему какие еще интерфейсы поддерживает объект, лежащий под полученным тобой интерфейсом.

ЗЫ. Именно в COM я не спец. Интерфейсами регуларно пользуюсь, но для своих целей. Вполне возможно, что в COM по интерфейсу можно понять, какие еще интерфейсы он поддерживает. Я это не знаю.


Dragon21   (2004-09-30 14:45:00) [32]

Это DLL из Visual Source Safe, каждый файл там реализован в виде интерфейса, там история изменений и еще много чего. Вот этот интерефейс и хотелось слить в поток. Вот только способ найти не могу.


Суслик   (2004-09-30 14:42:00) [33]


>  [2] Dragon21   (30.09.04 14:39)

Если интерфейс не предоставляет тебе информацию о данных, к которым он собственно доступ и организует, или ты не знаешь какие другие способные к сохранению в поток интерфейсы  реализует объект, то у тебя ничего не выйдет.


Dragon21   (2004-09-30 14:39:00) [34]

Нет к сожалению у меня такой информации, в полученном интерфейсе точно нет такого метода как сохранение в stream, вот и пытался как нибудь привести к интерфейсу с таким методом. Ничего не получилось. Может есть другой способ?


Суслик   (2004-09-30 14:32:00) [35]


>  Но как это обойти не знаю. Может кто сталкивался с подобной
> проблемой, поделитесь как можно решить эту проблему?

Именно с такой я не сталкивался. Но могу предположить, что очевиден тот факт, что преобразовывать IInterface к IDockManager можно только, если объект, реализующий, IInterface реализует и IDockManager.

У тебя есть информация о том, что объект реализует также IDockManager?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо