C#Activex事件未触发

C#Activex事件未触发,c#,javascript,com,activex,C#,Javascript,Com,Activex,我编写了一个简单的.Net Com activex,可以通过javascript管理一些事件。 我读了很多帖子、文章,但没什么可做的。在客户端,我无法用任何一种javascript语法(attachEvent、函数名等)捕获任何事件 以下是有关我的activex的代码片段: [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("61327C9D-EFC5-42B7-BA0D-4A86

我编写了一个简单的.Net Com activex,可以通过javascript管理一些事件。 我读了很多帖子、文章,但没什么可做的。在客户端,我无法用任何一种javascript语法(attachEvent、函数名等)捕获任何事件

以下是有关我的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

    }

您应该能够通过以下方式附加事件:

<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>

var activex=new ActiveXObject(“AxControls.HelloWorld”);
函数raise(){
eval(“函数activex::HelloWorld(prm){返回HelloWorld(prm);}”);
activex.HelloWorld();
}
HelloWorld(prm)上的函数{
警报(prm);
返回true;
}