1、开发及测试环境:
(1)开发环境:
Visual Studio 2010
cabsdk(下载地址:http://support.microsoft.com/kb/310618)
(2)测试环境:
Windows xp IE6
2、创建项目
我这里创建了三个项目:
(1)HelloBossma :
项目模板:Windows窗体控件库
(2)HelloBossmaSetup:
项目模板:安装项目
(3)Web:
项目模板:ASP.NET 网站
3、HelloBossma项目
这个项目用于编写具体的控件,并生成安装文件所需要的dll。
(1)添加用户控件:
(2)设计控件:
添加Panel、GroupBox、Label 控件。NowTime是一个Label控件,用于显示时间。
然后在控件对应的代码文件中编写程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace HelloBossma
{
/// <summary>
/// Guid将用作控件的classid
/// IObjectSafety的是用来标记可安全执行脚本的ActiveX控件
/// </summary>
[Guid("636B8CE1-7512-464C-B63C-FC75BDCA21DB"), ProgId("HelloBossma.HelloBossmaActiveX"), ComVisible(true)]
public partial class HelloBossmaActiveX : UserControl, IObjectSafety
{
private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}";
private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}";
private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}";
private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}";
private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}";
private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
private const int S_OK = 0;
private const int E_FAIL = unchecked((int)0x80004005);
private const int E_NOINTERFACE = unchecked((int)0x80004002);
private bool _fSafeForScripting = true;
private bool _fSafeForInitializing = true;
public HelloBossmaActiveX()
{
InitializeComponent();
}
/// <summary>
/// 设置当前时间
/// </summary>
/// <param name="timeStr"></param>
public void SetTime(string timeStr)
{
this.label2.Text = timeStr;
}
public void messagea(string timeStr)
{
MessageBox.Show(timeStr);
}
public int GetInterfaceSafetyOptions(ref Guid riid,
ref int pdwSupportedOptions,
ref int pdwEnabledOptions)
{
int Rslt = E_FAIL;