COM ve IE mimarisi hakkında yalnızca tehlikeli olmak için yeterli bilgiye sahip olduğumu kabul ediyorum.IE'de .NET ActiveX Bileşeni - Tarayıcı Başvurusu Nasıl Yapılır
using System;
using System.Runtime.InteropServices;
using BrowseUI;
using mshtml;
using SHDocVw;
using Microsoft.Win32;
namespace CTI
{
public interface CTIActiveXInterface
{
[DispId(1)]
string GetMsg();
}
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class CTIActiveX : CTIActiveXInterface
{
/*** Where can I get a reference to SHDocVw.WebBrowser? *****/
SHDocVw.WebBrowser browser;
public string GetMsg()
{
return "foo";
}
}
}
Ben kayıtlı ve regasm kullanarak bir tür kitaplığı oluşturuldu::
regasm CTIActiveX.dll /tlb:CTIActiveXNet.dll /codebase
Ve başarıyla javascript bu örneğini:
var CTIAX = new ActiveXObject("CTI.CTIActiveX");
alert(CTIAX.GetMsg());
Ben buna benzer bir çalışma C# .NET ActiveX denetimi var
CTIActiveX içindeki istemci sitesine (tarayıcı penceresi) nasıl başvuru yapabilirim? Bunu IObjectWithSite kullanarak bir BHO'da yaptım, ancak bunun bir ActiveX denetimi için doğru bir yaklaşım olduğunu düşünmüyorum. Herhangi bir arabirimi (IObjectWithSite gibi COM arabirimi) CTIActiveX üzerinde çalıştırırsam, Javascript'te başlatmaya çalıştığımda, nesnenin otomasyonu desteklemediğine dair bir hata alıyorum.
Aynı GetProperty ve PutProperty SHDocVw.WebBrowser yaptığı ortaya SHDocVw.InternetExplorer başvuru, alır cevap bana başka bir sorun ile yardımcı olur; Ancak, aradığım şey çok da kötü değil. IHTMLDocument2.parentWindow bir mshtml.IHTMLWindow2 döndürür, SHDocVw.WebBrowser değil. SHDocVw.WebBrowser'ı arıyorum, böylece bir BHO ile iletişim kurmak için GetProperty ve PutProperty yöntemlerine erişebilirim. –
Ayrıca, açık olmak gerekirse, sorudaki örnek işe yaramıyor. Uygulanabilir sınıf benim örneğimde olduğu gibi ComVisible belirtirse, ComVisible (true) gerekli görünmüyor. Sadece IObjectWithSite gibi bir COM arabirimini açıkça uygularsam kırılır. –