Как реализовать отправку событий с узла сценария Windows на сценарий
У меня есть приложение C++ COM (многопоточная модель квартиры), которое я создаю с помощью Visual C++ 2019. Я играю с интерфейсами и классами Active Script на основе COM. У меня есть JavaScript (на самом деле "JScript", CLSID{F414C260-6AC0-11CF-B6D1-00AA00BBBB58}
) Создан и настроен COM-объект Active Script. Все работает на удивление хорошо (к сожалению, для чего-то неизвестного).
Есть ли идиоматический подход к регистрации и вызову прослушивателей событий, при котором сценарий может использовать API, например https://dom.spec.whatwg.org/, и где я могу отправлять события с узла сценария (C++)? Для уточнения могу позвонитьIDispatch
методы интерфейса из сценариев, я хочу вызвать функции сценария, которые ранее были переданы с такими методами программе, из программы. GetScriptDispatch
это что-то еще - он позволяет мне вызывать методы, доступные в глобальном пространстве имен скрипта, но мне нужно вызывать функции, которые я передаю проксированному (из скрипта) методу addEventListener.
Я зависим от этой функциональности, потому что хочу отправлять события. В основном я хочуaddEventListener
быть доступным на определенных прокси (например, объекты, добавленные в пространство имен скрипта с AddNamedItem
), и мне нужно вызывать прослушиватели событий, добавленные через вызовы этого метода, когда происходят определенные события в приложении C++.
Я что-то читал о IConnectionPoint
, а в документации к Active Script пару раз кратко упоминаются "приемники событий", без примеров того, как и для чего они могут быть использованы. Также есть IBindEventHandler
интерфейс, без особого объяснения того, для чего его использовать.
Я понимаю, что это древний материал, но мне нравится COM, и интерфейс Active Script имеет несколько реализаций, которые для меня добавляют полезности.
1 ответ
Вам необходимо создать объект, реализующий события (см. IConnectionPoint
).
После запуска скрипта вы можете позвонить AddNamedItem
. Теперь скрипт знает интерфейс вашего объекта. Если он реализует, он может регистрироваться в этих событиях, когда состояние изменяется наSCRIPTSTATE_CONNECTED
.
Если событие запускается, сценарий получит событие и выполнит соответствующий раздел кода.
Есть старые образцы:
- Q168214 ОБРАЗЕЦ: MFCAXS (вы можете найти его в движке обратного пути)
- И здесь есть образец кода проекта
- Примеры ATL для событий смотрите здесь