zoukankan      html  css  js  c++  java
  • C# 创建ActiveX

    第一步:创建一个window窗体控件库。设置程序集信息,打开vs2010 GUID生成器生成GUID:

    <!--StartFragment -->

     
    勾选为com互操作注册,最好在debug和release下面都勾选(注意,此处如果是在debug状态下修改的,那在调到release状态下还需要再设置一次:
    <!--StartFragment -->
    打开AssemblyInfo.cs文件,添加:
    using System.Reflection;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;
    using System.Security;//自己添加 
    
    using System;
     
    // 有关程序集的常规信息通过以下
    // 特性集控制。更改这些特性值可修改
    // 与程序集关联的信息。
    [assemblyAssemblyTitle("LoginActiveX.Controls")]
    [assemblyAssemblyDescription("")]
    [assemblyAssemblyConfiguration("")]
    [assemblyAssemblyCompany("Orifound")]
    [assemblyAssemblyProduct("LoginActiveX.Controls")]
    [assemblyAssemblyCopyright("Copyright © Orifound 2011")]
    [assemblyAssemblyTrademark("")]
    [assemblyAssemblyCulture("")]
     
    //自己添加 
    [assemblyAllowPartiallyTrustedCallers()]
     
     
    // 将 ComVisible 设置为 false 使此程序集中的类型
    // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
    // 则将该类型上的 ComVisible 特性设置为 true。
    [assemblyComVisible(true)]  //注意: 此属性设置为true
    
     
    // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
    [assemblyGuid("4498e10b-8c59-4eec-bd0a-139fe2c7e65b")]//注意:为刚刚生成的Guid
    
    
    // 程序集的版本信息由下面四个值组成:
    //
    //      主版本
    //      次版本 
    //      内部版本号
    //      修订号
    //
    // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
    // 方法是按如下所示使用“*”:
    // [assembly: AssemblyVe 
    第二步,添加自己的控件了,添加一个用户控件,打开GUID生成器为控件生成GUID:
    [Guid("F51A8749-E7A7-4F76-A82A-7D860C788663")]
    public partial class LoginContorl : UserControl
     其次,为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“IObjectSafety”的接口,要创建该接口(注意,不能修改该接口的GUID值),IObjectSafety代码如下(注意,不能修改该接口的GUID值:主句话没弄明白,我每次都是自己生成的):
    [ComImportGuid("33F072D8-BFD7-4E80-B667-B63BFF64BE57")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        [PreserveSig()]
        void GetInterfacceSafyOptions(
        int riid,
        out int pdwSupportedOptions,
        out int pdwEnabledOptions);
     
        [PreserveSig()]
        void SetInterfaceSafetyOptions(
        int riid,
        int dwOptionsSetMask,
        int dwEnabledOptions);
    }
    注意这里要添加引用:using System.Runtime.InteropServices;
    修改控件类,使之继承IObjectSafety接口,代码清单如下:
    <!--StartFragment -->
     
        [Guid("F51A8749-E7A7-4F76-A82A-7D860C788663")]
        public partial class LoginContorl : UserControlIObjectSafety
        {
            public LoginContorl()
            {
                InitializeComponent();
            }
     
            #region IObjectSafety 成员
     
            public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
            {
                pdwSupportedOptions = 1;
                pdwEnabledOptions = 2;
            }
     
            public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
            {
                throw new NotImplementedException();
            }
     
            #endregion
     
            private void btOk_Click(object sender, EventArgs e)
            {
                MessageBox.Show("用户名: " + tbUserName.Text.Trim() +"  密码: " + tbPWD.Text.Trim());
            }
        }              
    到此为止控件开发完成。
  • 相关阅读:
    [转]tesseract api C++使用例子
    Flyway记录
    线程安全性和共享
    并发初解
    生产环境中遇到过什么问题?或者有没有自己解决什么问题比较自豪的
    Java白皮书关键词理解【随记】
    技术面试记录
    Mac下完全卸载IntelliJIdea
    docker提交镜像后运行新容器mysql无法启动
    IntelliJ IDEA切换SDK解决卡顿的问题
  • 原文地址:https://www.cnblogs.com/jiewei915/p/2547614.html
Copyright © 2011-2022 走看看