簡體   English   中英

通過 Javascript 管理 Activex .NET 事件

[英]Manage Activex .NET Event by Javascript

我確實寫了一個簡單的 COM .NET dll (Activex),以便通過 javascript 的 Html 頁面調用一些方法和管理一些事件。

好吧,在閱讀了很多關於 nowdays 的主題之后,我無法通過 javascript 管理任何事件。我確實嘗試了很多示例,很多語法,但不是為了我的目的。

我的 .NET COM 事件聲明如下所示: http://www.codeproject.com/Articles/24089/Create-ActiveX-in.NET-Step-by-Step

我也讀過這篇文章 (http://stackoverflow.com/questions/150814/how-to-handle-an-activex-event-in-javascript) 但我不確定如何以簡單的方式擴展我的 ActivexControl按照建議的方式。

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

using System.Threading;

namespace AxControls
{

    [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()
        {
            if (this.OnMyEvt != null) OnMyEvt(10);
            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

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM