Создать COM/ActiveXObject в C#, использовать из JScript, с простым событием

Я хотел бы создать COM-объект на C# и использовать его через IDispatch из JScript. Эта часть довольно проста.

Я также хочу реализовать простые обратные вызовы для COM-объекта, аналогичные событию, предоставляемому объектом XmlHttpRequest, который можно использовать в браузере. Эта модель позволяет Javascript присоединять обработчики событий следующим образом:

var xmlhttp = new ActiveXObject("MSXML.XMLHTTP"); 
xmlhttp.onReadyStateChange = function() {
  ...
};

Я хочу, чтобы код JScript на стороне клиента выглядел так:

var myObject = new ActiveXObject("MyObject.ProgId");
myObject.onMyCustomEvent = function(..args here..) { 
   ...
};

Как выглядит код C#? Мне нужен общий случай - я хотел бы иметь возможность передавать аргументы обратно в Javascript fn.


Я видел Как сделать так, чтобы элемент управления ActiveX, написанный на C#, вызывал события в JavaScript при нажатии?, но ответы выглядят очень сложными для реализации и сложными для использования.


Из этой статьиследует, что события XMLHttpRequest не являются событиями COM. onreadystatechangeявляется свойством типа IDispatch. Когда клиенты скриптов задают для этого свойства функцию, JScript маршалирует ее как объект IDispatch.

Единственная оставшаяся проблема — вызвать IDispatch из C#.

9
задан Community 23 May 2017 в 11:53
поделиться