Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Unsupported object type Добавлено: 30.08.05 12:45  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
Фишка такая - есть левый контрол, у которого есть метод Save. Он позволяет сохранять настройки либо в файл (бинарный), либо в т.н. Storage Stream - вариантную переменную. Сохраняет и считывает успешно, но в отладчике отображается Variant/Unsupported object type. Собственно, мне бы надо как-то вытащить оттуда эту бинарщину в буффер. Есть идеи?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 30.08.05 16:48
По varptr начинается структура VARIANT.
Работать с ней напрямую. Посмотреть тип данных, посмотреть pVoid, притырить через CopyMemory.

Ответить

Номер ответа: 2
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 31.08.05 11:19
Хм... А чуточку конкретнее?

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 31.08.05 11:32
Тип переменной показывает - VT_UNKNOWN. Как, собсно, данные то вытащить?

Ответить

Номер ответа: 4
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #4 Добавлено: 31.08.05 12:50
VT_UNKNOWN - значит, в punkVal указатель на IUnknown.
Объект там значит.
Его не дампить надо, у него методы надо вызвать.

VB его в этом случае не показывает потому, что он IDispatch не поддерживает, без чего браузер обламывается.


Попробуй скачать Olelib.tlb (она одна такая, ищи в гугле), подключить, после чего кастануть этот объект к IStream.

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 31.08.05 12:56
Да, это я уже уяснил :(
Видимо, IPersist он не поддерживает тоже. Похоже, обламываюсь...

Ответить

Номер ответа: 6
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #6 Добавлено: 31.08.05 13:01
Почему?
Если он IStream, он поддерживает IStream.Read.

Прочитал в байтовый буфер и вызвал ему объекту нафиг.


Кстати, у IStream.Read ровно три параметра, поэтому можно его вызвать через CallWindowProc.
Подробности: http://bbs.vbstreets.ru/viewtopic.php?p=72435#72435

Ответить

Номер ответа: 7
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #7 Добавлено: 31.08.05 13:02
Прочитал в байтовый буфер и вызвал ему объекту нафиг.

Вызвал ему Release нафиг, имел я в виду.

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 31.08.05 16:36
Не, не прокатило. IStream я получил, даже считал с него что-то, но явно не то. Видать как-то там все хитро сохраняется...

Ответить

Номер ответа: 9
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 31.08.05 16:49
Еще вопрос. Контрол, который создает этот объект, имеет интерфейс IPersist, как говорит OLEViewer, однако не в tlb, не через QueryInterface его не видно. Че за хрень?

Ответить

Номер ответа: 10
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #10 Добавлено: 31.08.05 16:53
Без понятия, ибо не видел контрола.

Объяви переменную типа IPersist, присвой ей контрол. Если не получится, значит OLEViewer врёт.

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 31.08.05 17:07
И снова к стриму. Да, IStream откастовался без проблем, но почему может не выдаваться инфа то? Контрол ведь тоже, блин, через Read её получать должен.

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 31.08.05 17:12
И снова я. Ну подключил я olelib.tlb, так она как, компилится в exe или таскать её придется? Я с tlb особо не работал.

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 31.08.05 17:21
Ок, GSerg, спасибо, все вопросы решил :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам