Страница: 1 |
Страница: 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, спасибо, все вопросы решил