第一篇博客,从如何开发一个ActiveX组件开始:
开发ActiveX组件的一个关键点就是要使所开发的组件能通过IE浏览的安全认证。如何通过安全认证?------必须要实现IObjectSafety接口,把ActiveX控件标记为安全的ActiveX控件。下面详述过程:
首先要在自己的类中实现接口IObjectSafety
此接口的定义如下
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]//这个Guid是唯一的...
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
//[PreserveSig]
void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions);
void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions);
}
注意:此接口的Guid唯一,不可变更,否则将无法通过IE浏览器的ActiveX控件的安全认证
在类中实现接口
public void GetInterfacceSafyOptions(System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
//
}
public void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions)
{
//
}
如上操作,再添加个人所要实现的逻辑即可。下面给出一个完整的例子,效果:在IE浏览器上弹出一个
MessageBox,显示一些内容。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace COM.Net
{
[Guid("20F541AC-3702-4E6E-AB5B-E01B97B97C9D")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ICOM
{
int Test(int num, string str1, string str2, double db);
}
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
//[PreserveSig]
void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions);
void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions);
}
[Guid("D7E5F1C1-A571-453D-B6F8-C0367E8122A5")]//这个值将是COM注册后的classid
//[ClassInterface(ClassInterfaceType.None)]
public class COMTest : ICOM, IObjectSafety
{
public int Test(int num, string str1, string str2, double db)
{
MessageBox.Show(String.Format("int data is {0};string data is {1} and {2};double data is {3}", num, str1, str2, db));
return num + str2.Length + Convert.ToInt32(db);
}
public void GetInterfacceSafyOptions(System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
//
}
public void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions)
{
//
}
}
}
注意:此例中的Guid:"D7E5F1C1-A571-453D-B6F8-C0367E8122A5" 即为HTML代码中object标签的classid。(下面HTML代码中将会用到)
其次,当完成C#代码,实现ActiveX组件之后,要解决的问题就是如何运用。
1.注册dll,此处的dll就是由上述的代码编译而来的。(这个你肯定懂...)
COM组件注册:regasm mydll.dll /codebase mydll.dll
COM组件注销:regasm mydll.dll /u /tlb:mydll.tlb
2.编写HTML代码,引用步骤1中注册的组件。
<html>
<head>
<meta charset="UTF-8"/>
<title>ActiveX</title>
<script type="text/javascript">
function onwindowload()
{
var obj = document.getElementById("aaa");
var i = obj.Test(1,'1','1',1);
}
</script>
</head>
<body οnlοad="onwindowload()">
<object id = "aaa" classid=clsid:D7E5F1C1-A571-453D-B6F8-C0367E8122A5></object>
</body>
</html>
OK,至此ActiveX组件的开发、注册及应用已全部讲述,希望对各位有所帮助,我是博主galaa2011;
最后,上一张效果图......