Как реализован бейсиковсий оператор WithEvents с т.з. COM?
От: Contact Россия http://www.lact.ru
Дата: 06.10.05 06:58
Оценка:
Скажите, как реализован в-бейсиковсий оператор WithEvents с точки зрения COM?

В msdn про WithEvents речь идет о какой-то статической линковке обработчиков к событиям, но вопрос -- в терминах COM что это означает?
Дело в том, что я пытаюсь написать плагин к Corel, делаю это на vc++, а все примеры идут бейсиковские.
Т.о. я не могу понять, каким образом ловить события. В примерах это сделано через WithEvents.

p.s. Там не используется технология connection points. По кр. мере никакой поддержки IConnectionPoint или методов Advise/unadvise не обнаружено.
С уважением,
Павел Васёв
-------------
LineAct — автоматическое создание Вашего сайта под ключ: дизайн, хостинг, online cms, хранилище файлов — стоит всего 6000 р...
Re: Как реализован бейсиковсий оператор WithEvents с т.з. CO
От: AndrewJD США  
Дата: 06.10.05 12:18
Оценка:
Здравствуйте, Contact, Вы писали:

C>Скажите, как реализован в-бейсиковсий оператор WithEvents с точки зрения COM?


Обычные COM dispinterface события.

C>p.s. Там не используется технология connection points. По кр. мере никакой поддержки IConnectionPoint или методов Advise/unadvise не обнаружено.

Скорее всего плохо смотрел.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re: Как реализован бейсиковсий оператор WithEvents с т.з. CO
От: Vi2 Удмуртия http://www.adem.ru
Дата: 07.10.05 05:02
Оценка:
Здравствуйте, Contact, Вы писали:

C>Скажите, как реализован в-бейсиковсий оператор WithEvents с точки зрения COM?


C>В msdn про WithEvents речь идет о какой-то статической линковке обработчиков к событиям, но вопрос -- в терминах COM что это означает?

C>Дело в том, что я пытаюсь написать плагин к Corel, делаю это на vc++, а все примеры идут бейсиковские.
C>Т.о. я не могу понять, каким образом ловить события. В примерах это сделано через WithEvents.

C>p.s. Там не используется технология connection points. По кр. мере никакой поддержки IConnectionPoint или методов Advise/unadvise не обнаружено.


Естественно, т.к. VB скрывает многие мелкие (но важные) детали. В данном случае вся кухня с IConnectionPoint и его методов Advise/Unadvise, как и возню с IConnectionPointContainer. А также генерация синка (sink), отвечающего за обработку событий.

Как видишь, все происходит так же, как и на С: реализуешь синк для известного событийного интерфейса и подключаешься к объекту. А известный событийный интерфейс VB берет из библиотеки описания типа (Type Library) для данного типа, который используется в операторе с WithEvents.
Private WithEvents obj As Word.Application ' даст создание обработчиков событий
Private WithEvents obj2 As Word.[_Application] ' увы! не даст, хотя это одно и тоже
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: Как реализован бейсиковсий оператор WithEvents с т.з. CO
От: Stas1981 Россия http://www.rsdn.ru/
Дата: 13.10.05 08:51
Оценка:
Здравствуйте, Contact, Вы писали:

C>Скажите, как реализован в-бейсиковсий оператор WithEvents с точки зрения COM?


Сталкивался с этой проблемой.
В свое время я делал среду для разработки скриптов и встраивания их в сторонние приложения (Macros IDE / Script Debugger IDE), и как раз одному клиенту потребовалась необходимость того самого WithEvents, которой собственно в VBScript и JScript и нет.

Я создал функцию:

Function ConnectObject (Name as String, Object as Object) As Boolean
Parameters:
Name — name of the sink object,
Object — pointer to the sink object.


Функция позволяла имитировать VB-шный код WithEvents.

'  VBScript
Dim MyObj
Set MyObj = CreateObject("Test.MyObject")
Script.ConnectObject "TestName", MyObj
MyObj.MyRaise

Sub TestName_MyEvent()
'    Do Smth
End Sub
Стас
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.