C# 创建ActiveX

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;

// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("LoginActiveX.Controls")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Orifound")]
[assembly: AssemblyProduct("LoginActiveX.Controls")]
[assembly: AssemblyCopyright("Copyright © Orifound 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

//自己添加
[assembly: AllowPartiallyTrustedCallers()]


// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(true)] //注意: 此属性设置为true


// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("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值:主句话没弄明白,我每次都是自己生成的):
[ComImport, Guid("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 : UserControl, IObjectSafety
{
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());
}
} 到此为止控件开发完成。

原文地址:https://www.cnblogs.com/xianyin05/p/3051730.html