Как реализовать отправку событий с узла сценария 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 для событий смотрите здесь
Другие вопросы по тегам