- 首先新建項目--->類庫,取名:ActiveXDemo
- 右鍵項目屬性:應用屬性==>程序集信息=>使程序集Com可見,
- 生成==>輸出==>為com互操作注冊
- 新建接口類取名:IObjectSafety,以下代碼可直接用,最好不要修改
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.InteropServices; 5 using System.Text; 6 7 namespace ActiveXDemo 8 { 9 [ComImport, Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] 10 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 11 public interface IObjectSafety 12 { 13 [PreserveSig] 14 int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions); 15 [PreserveSig()] 16 int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions); 17 } 18 }
新建用戶控件取名:UserControl1,UserControl1繼承自上面新建的接口IObjectSafety,並實現接口(實現接口的方法請復制下面的內容),在類UserControl1添加Guid特性值,利用VS的工具生成guid
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace ActiveXDemo { [Guid("C5BD015D-E2AA-4DD3-AEB7-93D7409FA751")] public partial class UserControl1 : UserControl, IObjectSafety { public UserControl1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("ActiveXDemo"); } public string GetGUID() { return Guid.NewGuid().ToString(); } #region 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 int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions) { int Rslt = E_FAIL; string strGUID = riid.ToString("B"); pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; switch (strGUID) { case _IID_IDispatch: case _IID_IDispatchEx: Rslt = S_OK; pdwEnabledOptions = 0; if (_fSafeForScripting == true) pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER; break; case _IID_IPersistStorage: case _IID_IPersistStream: case _IID_IPersistPropertyBag: Rslt = S_OK; pdwEnabledOptions = 0; if (_fSafeForInitializing == true) pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA; break; default: Rslt = E_NOINTERFACE; break; } return Rslt; } public int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions) { int Rslt = E_FAIL; string strGUID = riid.ToString("B"); switch (strGUID) { case _IID_IDispatch: case _IID_IDispatchEx: if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && (_fSafeForScripting == true)) Rslt = S_OK; break; case _IID_IPersistStorage: case _IID_IPersistStream: case _IID_IPersistPropertyBag: if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && (_fSafeForInitializing == true)) Rslt = S_OK; break; default: Rslt = E_NOINTERFACE; break; } return Rslt; } #endregion } }
進行簡單界面布局:
點擊按鈕效果見上面代碼,還可自己寫一個公共方法,我寫的是GetGUID(),
生成成功將會生成兩個文件:ActiveXDemo.dll和ActiveXDemo.tlb,至此ActiveX瀏覽器插件制作完成,
以下是如何打包安裝ActiveX插件,
我用的InstallShield2010破解版制作安裝包
新建InstallScript Msi類型工程
最主要的是在添加文件時候,要把ActiveXDemo.tlb這個文件設為自注冊
在生成安裝文件時候,可以選擇生成適合網絡形式的或者單個安裝包,在這里我生成了單個安裝包,你也可以選擇生成網絡的
點擊生成安裝包按鈕,生成后如下:
至此,安裝包制作完成,我們點擊安裝后他會自動注冊tlb文件.
以下是如何使用ActiveX插件:
新建一個html頁面:我取名:TestActiveX.html
內容如下:
1 <!DOCTYPE html> 2 3 <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 4 <head> 5 <meta charset="utf-8" /> 6 <title></title> 7 <Script type="text/javascript"> 8 function GetGUID() { 9 var a= document.getElementById("ActiveXDemo").GetGUID(); 10 alert(a); 11 } 12 13 </Script> 14 </head> 15 <body> 16 <object id="ActiveXDemo" classid='clsid:C5BD015D-E2AA-4DD3-AEB7-93D7409FA751' width="350" height="350"></object> 17 18 <input id="Button1" type="button" value="獲取guid" onclick="GetGUID()" /> 19 </body> 20 </html>
注意這里的classid要和你的插件上生成的guid一致才可以
查看頁面效果:
到此,結束,關於用InstallShield制作安裝包的詳細過程,請自行學習.