1.Guid 指定
每一个控件有自己的Guid,系统会根据这个号寻找加载此控件。
(1)新建项目时,选择Usercontrol
(2)[工具]->[创建Guid],生成Guid号
(3)在class关键字前加上这一行:[Guid("89933-899-3...前面生成的guid号")].注意Guid要加入引用System.Runtime,InteropServics
(4)编译时注册控件。[项目]->[control*属性]->[配置属性]->[为comInterop注册]->true
2.访问权限安全设定(AssemblyInfo.cs中)
(1)在AssemblyInfo.cs中加入引用System.Security
(2)加入[assembly:AllowPartiallyTrustedCallers()]
3.加入微软的认证接口
(1)[项目]->[添加类]
(2)类代码如下:
using System;
using System.Runtime.InteropServices;
namespace control_infoIsLate
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
// methods
void GetInterfacceSafyOptions(
System.Int32 riid,
out System.Int32 pdwSupportedOptions,
out System.Int32 pdwEnabledOptions);
void SetInterfaceSafetyOptions(
System.Int32 riid,
System.Int32 dwOptionsSetMask,
System.Int32 dwEnabledOptions);
}
}
(3)添加控件类的基类.如:class UserControl1 : System.Windows.Forms.UserControl,IObjectSafety
(4)在控件类中实现接口,加入如下代码:
#region IObjectSafety 成员
public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions)
{
// TODO: 添加 WebCamControl.GetInterfacceSafyOptions 实现
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}
public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions)
{
// TODO: 添加 WebCamControl.SetInterfaceSafetyOptions 实现
}
#endregion
4.ActiveX的发布
(1)在html中加入这么几行
<object id="haha"
classid="clsid:6DE8EA4F-B00E-43c3-94DC-12EC8B1F482E"
CODEBASE="http://172.16.20.94:8080/zd2/activex/Setup.Exe"
WIDTH=100% HEIGHT=100%>
</object>
当浏览器在本地系统中找不以classid号的控件,就会下载codebase指定的程序进行自动安装。
(2)控件接口的调用
<script>
hah.TestFunction();
</script>
注意,在C#中将TestFunction的访问权限设为public就可以了。在VC开发中,好象有专门地添加AxtiveX接口的地方。
5.ActiveX网上安装包的制作
(1)新建安装部署项目,选择[安装项目],不是[web安装项目].
(2)在这个安装项目下,添加一个[项目输出],选择一个控件项目,并在下面选择[主输出]那一行。确定后自动加入程序集。
(3)打开[项目]->[属性],引导程序的下拉框选择
"web引导程序",点击后边的"设置",在安装文件夹URL中填入:http://172.16.20.94:8080/zd2/activex(与上一步的codebase是对应的)