Как по данному EventID получить имя Event'a?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Как по данному EventID получить имя Event'a?

Сообщение zHackLeX » 11.11.2006 (Сб) 12:54

Найденный мной пример:
http://msdn.microsoft.com/msdnmag/issues/01/03/connpoints/

позволяет ловить события объектов поздней связки. Причём отлов идёт по EventID. Вопрос: как вычислить имя события по его идентификатору?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.11.2006 (Сб) 13:45

Если у объекта, вызвавшего событие, нет TLB, то никак.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 11.11.2006 (Сб) 15:27

Гм. IDispatch->GetTypeInfo.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.11.2006 (Сб) 15:31

Гм. На каком IDispatch предлагаешь это вызывать? На своей собственной евентоловке? ;-)
(Как эта евентоловка, кстати, называется по-умному? Синк?)
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 11.11.2006 (Сб) 15:37

Перед тем как ловить евент объекта, надо что-то с ним сделать. А значит есть на него ссыль. А значит есть IDispatch(если он у объекта вообще есть.)
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.11.2006 (Сб) 16:40

Неужели непонятно, что в том IDispatch, на который есть ссылка, только методы? а события совсем в другом IDispatch -- в евентоловке, реализованной тобой?
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 11.11.2006 (Сб) 16:48

Погоди. Инфа о эвентах в TLB есть? Есть. GetTypeInfo фактически её и выдавать должна. Или не так?
Изображение

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

Сообщение GSerg » 11.11.2006 (Сб) 16:55

tyomitch писал(а):Если у объекта, вызвавшего событие, нет TLB, то никак.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.11.2006 (Сб) 17:23

keks-n писал(а):Погоди. Инфа о эвентах в TLB есть? Есть. GetTypeInfo фактически её и выдавать должна. Или не так?

Нет, не её. Она выдаёт инфу о членах того интерфейса, у которого вызвана. А не о всех подряд интерфейсах в TLB.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.11.2006 (Сб) 20:48

Вдруг подумалось: если повезёт, и класс реализует IProvideClassInfo, то из этого интерфейса (а совсем даже не из IDispatch) можно вытащить ITypeInfo для класса целиком, и там среди исходящих интерфейсов выбрать нужный.
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 12.11.2006 (Вс) 2:20

Ну... за provideclassinfo не ручаюсь...
Вообще - план был прост - реализовывалось добавление своих объектов к namespace'у scriptcontrol'a.... Для этого сварганил класс-расширение скриптконтрола (полный контроль кода, т е не только добавить-обновить, добавка/удаление объектов и ещё кое-что по мелочи), объекты хранил набором элементов класса "ScriptObject", который и транслировал события в Scriptcontrol
Рассматривал я три варианта
1) mScriptObject Is Form => для этого одна withevents переменная
2) mScriptObject Is Control => VBControlExtender
3) Иначе - как раз использовал описанный в статье метод.

Так что, eventID это есть MemberID при наличии TypeInfo, или я чего не понял?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2006 (Вс) 8:42

zHackLeX писал(а):Так что, eventID это есть MemberID при наличии TypeInfo, или я чего не понял?

eventID это есть MemberID при наличии TypeInfo на исходящем интерфейсе, реализованном в твоей евентоловке. А не на входящем IDispatch объекта, кидающего события.
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 12.11.2006 (Вс) 10:37

...на входящем интерфейсе.
Забавно... Тогда MemberID чего именно?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2006 (Вс) 10:46

События, чего же ещё? :roll:
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 13.11.2006 (Пн) 23:23

События, вызванного эвентоловкой, или события, пойманного эвентоловкой?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2006 (Вт) 9:17

Евентоловка ничего не вызывает. Она только ловит.
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 14.11.2006 (Вт) 11:14

так значит имя события получать надо ещё в евентоловке?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2006 (Вт) 11:33

Эээ... А где же ещё? :roll:

В других местах у тебя просто нет ID, по которому ты бы мог получить имя.
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 14.11.2006 (Вт) 16:23

ID передаётся эвентоловкой... в качестве параметра
у евентоловки единственное событие - _incomingevent(eventid,eventargs)

Что, этот eventid - не тот что ли?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2006 (Вт) 18:15

ID передаётся эвентоловке, в качестве параметра.
А что не так?
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 14.11.2006 (Вт) 21:49

Код: Выделить всё
Private Sub bridgeobj_incomingevent(eventobj As Object)
    Dim tmpeventobj As comevent.comeventcls
    msg = msg & "Incoming event!" & vbCrLf
    msg = msg & "Event ID: " & CStr(tmpeventobj.eventID) & vbCrLf
    ...

что же тогда я получил в eventid?

"ничего не понимаю..." © братьев пилотов
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.11.2006 (Вт) 22:09

Выложи ка весь код.
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 14.11.2006 (Вт) 22:11

весь код здесь:
http://msdn.microsoft.com/msdnmag/issues/01/03/connpoints/
скачай connpoints.rar и скомпилируй всё в том порядке, в каком там сказано... потом в vbclient посмотри как ловятся события...
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 123

    TopList