Опрос объекта на предмет свойств

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Опрос объекта на предмет свойств

Сообщение GSerg » 01.12.2003 (Пн) 11:01

Имеется замечательная функция CallByName, работающая в полном соответствии с COM...
Зырил я её через PEBrowse. Она получает указатель на IUnknown, вызывает какую-то бяку, оная возвращает либо указатель на запрашиваемый метод, либо код ошибки DISP_E_MEMBERNOTFOUND. То, что происходит дальше, мне совершенно не интересно.
Спрашивается, что она вызывает всё-таки, и как это работает?

Зырил MSDN на предмет DISP_E_MEMBERNOTFOUND, нашёл кучу всякой лажи...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 01.12.2003 (Пн) 17:18

Посмотри еще, раз любопытный, TypeLib Information в References...

Так вот скорми объекту TLIApplication свою Object-переменную в метод InterfaceInfoFromObject.

Код: Выделить всё
Dim ta As TLIApplication, ti As InterfaceInfo
Set ta = New TLIApplication
Set ti = ta.InterfaceInfoFromObject(твой_объект)

Да посмотри на этот объект в Locals Window...
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.12.2003 (Вт) 9:34

Я гораздо любопытнее, чем кажется...

Вещь прикольная, будем ковырять. Но как она работает? Я чего только не делал с этой объектной переменной, каким только апишкам её не скармливал. Добился только того, что апишка сказала: да, тут наличествует IDispatch. Но при попытке его опросить - либо облом, либо крэш.
В любом случае, чего-то я не вижу в этой TypeLibInfo указателей на функции. Смещение VTable вижу, а дальше?


Хотя нет, вижу и это.
Так, финальный вопрос: каким образом преобразовать все эти смещения в нормальный виндовский указатель на функцию? Вэять указатель на объект, сложить с указателем на VTable и с указателем на функцию?
Или это вещи не сопоставимые?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 02.12.2003 (Вт) 11:36

Код: Выделить всё
Private Sub Form_Load()
Dim BckClr As Long
  BckClr = CallByName(Me, "BackColor", VbGet)
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.12.2003 (Ср) 16:46

Ну ваще...
Это же получение значения свойства. А мне нужен указатель на функцию.
Функции тут stdcall, я выяснил... Так что указатель очень даже имеет смысл...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 9

    TopList