C#开发的供IE浏览器使用的控件

使用C#开发用户控件,供IE浏览器调用,除了应用程序属性中程序集信息窗口的“使程序集COM可见”和  生成中的“为COM互操作注册”要打勾外,还要求方法/函数的返回值不能是void,COM中是一般返回HRESULT, C#中可以用int替换。


   [ComImport]
    [Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        [PreserveSig]
        int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);

        [PreserveSig()]
        int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
    }

    [Guid("A53DD1E5-CA43-46a8-A51E-231FF7B322E3")]
    [ProgId("TestOcx.TextFunc")]
    [ComVisible(true)] 
    public partial class TextFunc : UserControl, IObjectSafety
    {

        #region IObjectSafety 成员

        private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
        private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
        private const int S_OK = 0;

        [PreserveSig]
        public int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions)
        {
            pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
            pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
            return S_OK;
        }

        [PreserveSig]
        public int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions)
        {
            return S_OK;
        }

        #endregion

        public TextFunc()
        {
            InitializeComponent();
        }

        public int ShowText(string strText)
        {
            MessageBox.Show(strText);
            return S_OK;
        }
    }


如何方法返回为void,则IE调用该控件为ActiveX时总找不到该方法,经多次尝试,只要不是void方法,都可以正常使用。

转载于:https://my.oschina.net/jjfcplusplus/blog/501766

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值