要使用C#实现一个ActiveX控件,需要解决三个问题:
  1.使.NET组件能够被COM调用
  2.在客户机上注册后,ActiveX控件能通过IE的安全认证
  3.未在客户机上注册时,安装包能通过IE的签名认证
  本程序的开发环境是.NET Framework 3.5,工具是Visual Studio .NET 2008,在安装.NET Framework 3.5的客户机上通过测试
  下面是实现步骤:
  (一)创建可从COM访问的程序集
  首先实现一个对COM可见的程序集,创建类库工程,AssemblyInfo.cs应包含:
  using System.Runtime.InteropServices;
  //使此程序集中的类型对COM组件可见
  [assembly: ComVisible(true)]
  // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
  [assembly: Guid("94882155-3B7C-48e3-B357-234D56D8F15E")]
  加入以下代码到AssemblyInfo.cs确保程序集的可访问性:
  using System.Security;
  [assembly: AllowPartiallyTrustedCallers()]
  注意上面的Guid,如果程序集内部的类未标注Guid,COM注册的Guid是会新生成的,此处的Guid没有作用。
  创建用户控件(自定义类待测)IdentityKey.cs,加入:
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace KeyActiveX
{
[Guid("94882155-3B7C-48e3-B357-234D56D8F15E")]
public partial class IdentityKey : UserControl
{
}
}
  这里的Guid和AssemblyInfo.cs一样,它会在COM注册中成为CLSID并被html以clsid调用。
  类库工程属性中,选择生成,勾选COM注册,在html文件中加入
  <object id="controlbyid" classid="clsid:{94882155-3B7C-48e3-B357-234D56D8F15E}" ></object>
  在IE中启用不安全控件,查看html页面,应能访问到控件,现在一个在发布时对COM注册的程序集开发完成了。
  使用OLE/COM Object Viewer(安装VC自带)可以在.NET Categories中查看组件和CLSID。