Je voudrais créer un objet COM en C#, et l'utiliser via IDispatch depuis JScript. Cette partie est assez simple.Créer COM/ActiveXObject en C#, utiliser depuis JScript, avec un événement simple
Je veux également implémenter des rappels simples sur l'objet COM, similaire à l'événement exposé par l'objet XmlHttpRequest qui est utilisable dans un navigateur. Ce modèle permet Javascript pour attacher des gestionnaires d'événements comme celui-ci:
var xmlhttp = new ActiveXObject("MSXML.XMLHTTP");
xmlhttp.onReadyStateChange = function() {
...
};
Je veux que mon code JScript côté client pour ressembler à ceci:
var myObject = new ActiveXObject("MyObject.ProgId");
myObject.onMyCustomEvent = function(..args here..) {
...
};
Qu'est-ce que le look de code C# comme? Je voudrais le cas général - je voudrais pouvoir renvoyer des arguments au Javascript fn.
Je l'ai vu How can I make an ActiveX control written with C# raise events in JavaScript when clicked?, mais les réponses LOOK-il vraiment compliqué à mettre en œuvre, et compliqué à utiliser.
De this article, il semble que les événements XMLHttpRequest ne sont pas des événements COM. Le onreadystatechange
est une propriété de type IDispatch
. Lorsque les clients de script définissent cette propriété sur une fonction, JScript la classe en tant qu'objet IDispatch.
Le seul problème qui reste est alors d'invoquer l'IDispatch de C#.
Il s'agit d'un appel lié tardivement, pas d'un événement. Utilisez l'attribut [ComSourceInterfaces] pour exposer les événements .NET. –
Exactement. Ce n'est pas du tout un événement COM, mais il est plus simple à construire et à utiliser que de câbler des événements COM pour ce scénario restreint - un objet et un utilisateur de cet objet. Et en fait, bien que ce ne soit pas un événement COM, les programmeurs le comprennent correctement pour satisfaire leurs besoins en "un événement" pour un objet scriptable. C'est pourquoi XMLHttpRequest utilise l'approche, je suppose, pour 'onreadystatechange'. Cela aussi, n'est "pas ** un événement **" mais il est certainement compris comme un événement par des millions de développeurs. La définition spécifique de COM du terme «événement» n'est pas pertinente à certaines fins. – Cheeso
Lors de la création de l'objet ActiveXObject dans JScript, le '' Cheeso.Greet "' provient-il de 'ProjId', le nom de la DLL,' Namespace.ClassName' ou ailleurs? Peu importe ce que j'essaie, il me semble toujours obtenir "Le serveur d'automatisation ne peut pas créer d'objet". –