2012-04-10 25 views
3

我寫了一個簡單的.Net Com ActiveXx,我將能夠通過JavaScript管理一些事件。 我看了很多文章,但沒有做什麼。客戶端方面,我無法用任何一種javascript語法捕捉任何事件(attachEvent,函數名稱等)。C#的Activex事件不會火

以下是關於我的ActiveX代碼片段:

[ComVisible(true)] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    [Guid("61327C9D-EFC5-42B7-BA0D-4A8648797003")] 
    public interface IHelloWorld 
    { 
     string GetText(); 
    } 

    [ComVisible(true)] 
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
    [Guid("61327C9D-EFC5-42B7-BA0D-4A8648797003")] 
    public interface IMyEvt 
    { 
     [DispId(1)] 
     void OnMyEvt(int prm); 
    } 

    [ComImport()] 
    [Guid("13AD0E8B-BA3F-4CDE-A7D4-8A311EC1766B")] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    interface IObjectSafety 
    { 
     [PreserveSig()] 
     int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions); 

     [PreserveSig()] 
     int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions); 
    } 




    [ComVisible(true)] 
    [ClassInterface(ClassInterfaceType.None)] 
    [Guid("32E6AD29-DD5F-46EA-A4D1-BD2F1E3EE064")] 
    [ProgId("AxControls.HelloWorld")] 
    [ComSourceInterfaces(typeof(IMyEvt))] 
    public class HelloWorld : UserControl, IHelloWorld, IObjectSafety 
    { 
     [ComVisible(false)] 
     public delegate void OnMyEvtDelgate(int prm); 

     [DispId(1)] 
     public event OnMyEvtDelgate OnMyEvt; 

     public HelloWorld() 
     { 
      this.OnMyEvt += new OnMyEvtDelgate(Dummy); 
     } 

     void Dummy(int param) { } 

     #region IHelloWorld Members 

     public string GetText() 
     { 
      return "Hello ActiveX World!"; 
     } 

     #endregion 

     #region IObjectSafety Members 

     public enum ObjectSafetyOptions 
     { 
      INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001, 
      INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002, 
      INTERFACE_USES_DISPEX = 0x00000004, 
      INTERFACE_USES_SECURITY_MANAGER = 0x00000008 
     }; 

     public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions) 
     { 
      ObjectSafetyOptions m_options = ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA; 
      pdwSupportedOptions = (int)m_options; 
      pdwEnabledOptions = (int)m_options; 
      return 0; 
     } 

     public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) 
     { 
      return 0; 
     } 

     #endregion 

    } 
+0

?沒有找到答案 – bit 2012-04-10 09:26:21

回答

0

你應該能夠連接事件是這樣的:

<script type="text/javascript">  
var activex = new ActiveXObject("AxControls.HelloWorld"); 
     function raise() { 
      eval("function activex::HelloWorld(prm) {return onHelloWorld(prm);}"); 
      activex.HelloWorld(); 
     } 

     function onHelloWorld(prm) { 
      alert(prm); 
      return true; 
     } 

    </script>