C#' da bir COM nesnesi oluşturmak ve bunu JScript'ten IDispatch ile kullanmak istiyorum. Bu bölüm oldukça basit.C# 'da COM/ActiveXObject oluşturun, basit bir olayla JScript içinden kullanın,
Ayrıca, bir tarayıcıda kullanılabilen XmlHttpRequest nesnesi tarafından gösterilen olaya benzer COM nesnesinde basit geri aramalar uygulamak istiyorum.
var xmlhttp = new ActiveXObject("MSXML.XMLHTTP");
xmlhttp.onReadyStateChange = function() {
...
};
benim istemci tarafı JScript kodu şöyle bakmak istiyorum: O model JavaScript böyle olay işleyicileri eklemek sağlar
var myObject = new ActiveXObject("MyObject.ProgId");
myObject.onMyCustomEvent = function(..args here..) {
...
};
nasıldır C# kodu görünüyor? Genel davayı istiyorum - Argümanları Javascript'e geri döndürmek istiyorum.
Ben How can I make an ActiveX control written with C# raise events in JavaScript when clicked? gördüm ama orada cevaplar gerçekten uygulanması karmaşık ve kullanımı karmaşık bak. this article itibaren
, XMLHttpRequest olaylar COM olayları değil gibi görünüyor. onreadystatechange
, IDispatch
türünde bir özelliktir. Komut istemcileri bu özelliği bir işleve ayarladıklarında, JScript bunu bir IDispatch nesnesi olarak sıralar.
Kalan tek sorun, kimliğini C# 'den çağırmaktır.
Bu geç bir ilişkili çağrı değil bir olaydır. .NET olaylarını açığa çıkarmak için [ComSourceInterfaces] özniteliğini kullanın. –
Tam olarak. Bu bir COM olayı değildir, ancak bu kısıtlı senaryo için COM olaylarını kablolamaktan ve kullanmaktan daha basittir - bir nesne ve bu nesnenin bir kullanıcısı. Ve aslında, bir COM olayı olmasa da, programcılar bunu bir betik nesnesi için "bir olaya" yönelik ihtiyaçlarını karşılamak için doğru bir şekilde anlarlar. Bu nedenle, XMLHttpRequest, "onreadystatechange" için yaklaşımı kullanır. Bu da, "bir olay değil **" dir, ama kesinlikle milyonlarca dev tarafından bir olay olduğu anlaşılmaktadır. COM'un "olay" teriminin özel tanımı, bazı amaçlar için ilgisizdir. – Cheeso
JScript'te ActiveXObject oluşturarak, başka bir yere tamamen '' ProjId' DLL adından gel "Cheeso.Greet" ',' Namespace.ClassName' veya çalışır? Ne denediğim önemli değil Her zaman "Otomasyon sunucusu nesne oluşturamaz" gibi görünüyor. –