Скажите, как реализован в-бейсиковсий оператор WithEvents с точки зрения COM?
В msdn про WithEvents речь идет о какой-то статической линковке обработчиков к событиям, но вопрос -- в терминах COM что это означает?
Дело в том, что я пытаюсь написать плагин к Corel, делаю это на vc++, а все примеры идут бейсиковские.
Т.о. я не могу понять, каким образом ловить события. В примерах это сделано через WithEvents.
p.s. Там не используется технология connection points. По кр. мере никакой поддержки IConnectionPoint или методов Advise/unadvise не обнаружено.
Здравствуйте, 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] ' увы! не даст, хотя это одно и тоже
Здравствуйте, 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