Страница: 1 |
Страница: 1 |
Вопрос: Без TLB
Добавлено: 30.09.05 11:08
Автор вопроса: LamerOnLine | ICQ: 334781088
Хотелось бы уточнить - есть указатель на определенный объект, который не поддерживает интерфейс IDispatch. Соттветственно, Unsupported Object Type. Как из VB вызвать его методы?
1. Через CallWindowProc, нужно первым параметром передавать ссылку на сам объект?
2. Как еще, кроме вышеназванной функции это сделать? Например, через абстрактный класс, ObjPtr и CopyMemory?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 30.09.05 12:36
TLB - лучший вариант. Ибо таскать его за собой не надо.
Когда-то давно я написал это: http://www.vbstreets.ru/VB/Articles/65974.aspx
Сейчас я так не делаю, ибо нефиг. Но в качестве примера сойдёт.
Номер ответа: 2
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #2
Добавлено: 30.09.05 12:38
Как-то упустил вторую часть вопроса...
Перезаписать vTable класса можно, но только в теории. На практике люди сталкивались с тем, что VB перезаписывает её обратно.
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 30.09.05 13:04
Да, интересная статейка. Я тоже сначала так думал сделать, но столкнулся с проблемами. Фича в том, что мне не нужно создавать Instance класса, объект уже существует. У меня есть его IUnknown. QueryInterface VB напрямую вызвать не даст - Restricted и все дела. Через CallWindowProc почему то падает, ща еще проверю.
Мне интересно, может оно потому что я использую не IIDFromString, а UiidFromString. Разницы вроде бы нету...
А TLB - знаю, весчь хорошая, таскать не надо, но порой просто не имеется. Либо несовместимый с VB тип данных (ULong и т.п.)
Номер ответа: 4
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #4
Добавлено: 30.09.05 15:59
А когда tlb не имеется, я её всегда делаю, ибо это существенно проще и быстрее, чем использование всего остального. А в заголовок этой tlb я всегда вставляю строки типа typedef ULONG LONG, а потом при использовании библиотеки просто помню, что это на самом деле ULong.