Как события реализуются под капотом? - PullRequest
0 голосов
/ 04 июля 2019

Когда я делаю урок для прослушивания других событий, подобных этому

Private WithEvents myClass As eventEmitter

Private Sub myClass_myEvent()
    '[...Handle Event]
End Sub

, а затем в myClass

Public Event myEvent

Sub DoStuff()
    RaiseEvent myEvent
End Sub

Какие шаги происходят и какие вещи требуютсяпод капотом для VBA превратить этот оператор RaiseEvent в вызов подпрограммы обработчика событий myClass_myEvent?


Я знаю, как обрабатывать и вызывать события в VBA,но я до сих пор точно не знаю, что это такое и как они работают.

Я прочитал обрывки о IDispatch, я попытался разобраться, как VB.Net обрабатывает их, поэтому я могупосмотрите, что весь синтаксис обработчика ObjectType_EventName(), используемый в VBA, скрывает много.

Я предполагаю, что под капотом события, вероятно, работают подобно очередям сообщений (за исключением объектов вместоокна), потому что они, кажется, строят таким же образом.Но, возможно, они больше похожи на обычные стеки вызовов - в этом случае Event знает, что его слушает, и просто помещает вызовы функций в стек вызовов, связанный с этими объектами слушателя.Тот факт, что только классы могут вызывать и обрабатывать события в VBA, указывает на то, что существует некоторый объем памяти / интерфейса, связанный с интерпретацией событий, который должен присутствовать во всех объектах VBA, так что это, вероятно, связано с реализацией COM в VBA в некотором роде..

Но это примерно столько, сколько я могу выработать, и я недостаточно знаком с темами, чтобы иметь возможность больше гуглить для себя, поэтому остается вопрос: как события работают под капотом?

...