建“Windows表單控制項陳列庫”類型的項目
設定程式集的可訪問性
往AssemblyInfo.cs加入以下代碼:
using System.Security;<br />[assembly: AllowPartiallyTrustedCallers]
做“允許與COM互動”的相關設定
開啟項目的屬性頁面後,
在“應用程式”選項卡中,
點擊“程式集資訊...”,勾選“使使程式集C0M 可見”;
在“產生”選項卡中,勾選“為COM互操作註冊”。
建安全介面
若不實現此介面,那在使用時必須修改IE安全屬性“對沒有標記為安全的ActiveX控制項進行初始化和運行”。
[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]<br />[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]<br /> public interface IObjectSafety {<br /> [PreserveSig]<br /> void GetInterfacceSafyOptions(<br /> int riid,<br /> out int pdwSupportedOptions,<br /> out int pdwEnabledOptions);</p><p> [PreserveSig]<br /> void SetInterfaceSafetyOptions(<br /> int riid,<br /> int dwOptionsSetMask,<br /> int dwEnabledOptions);<br /> }<br />
使用者控制項樣本
using System.Runtime.InteropServices;</p><p>[Guid("7CDF344D-A42D-44e0-A5B5-4562288B6A38")]<br />[ComVisible(true)]<br />public partial class UserControl1: UserControl, IObjectSafety {<br />public string Message { get; set; }<br />public mshtml.HTMLWindow2Class Html { private get; set; }</p><p>#region IObjectSafety 成員<br />public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions) {<br /> pdwSupportedOptions = 1;<br /> pdwEnabledOptions = 2;<br />}<br />public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions) {<br /> throw new NotImplementedException();<br />}<br />#endregion</p><p>public void ShowMessage() {<br /> MessageBox.Show(Message);<br />}</p><p>private void MessageButton_Click(object sender, EventArgs e) {<br /> ShowMessage();<br />}</p><p>private void JsButton_Click(object sender, EventArgs e) {<br /> Html.execScript(string.Format("document.getElementById('numberText').value='{0}';", DateTime.Now), "javascript");<br />}<br />}<br />
HTML樣本
<div><br /><object id="myActiveX" classid="clsid:7CDF344D-A42D-44e0-A5B5-4562288B6A38"><br /> <param name="Message" value="當前屬性由param參數賦值成功" /><br /></object><br /><input type='button' onclick='myActiveX.Message="當前屬性由js賦值成功"; myActiveX.ShowMessage()'<br /> value='用js和控制項互動' /><br /><input type="text" id="numberText" readonly="readonly" /><br /></div></p><p><script type="text/javascript" language="javascript"><!--<br />window.onload = function() {<br /> document.myActiveX.Html = this;<br />};<br />// --></script><br />
為此ActiveX做安裝包,以用於客戶機上手動安裝
使用.net做的ActiveX無法直接使用Regsvr32.exe進行安裝註冊。
VS會產生cab、msi、setup.exe三種類型的檔案
若為使客戶機上自動提示安裝,要為安裝程式加數位簽章
開啟“Visual Studio 2008命令列”後依次運行以下命令:
makecert -ss MyActiveX -n "CN=MyCorporation" -sv d:/MyActiveX.pvk -r d:/MyActiveX.cer
cert2spc d:/MyActiveX.cer d:/MyActiveX.spc
signtool signwizard
參考資料
ActiveX控制項開發實踐
C#ActiveX控制項及製作CAB包
Visual Studio 2008(c#)開發ActiveX控制項及製作CAB包總結(1)
Visual Studio 2008(c#)開發ActiveX控制項及製作CAB包總結(2)
Visual Studio 2008(c#)開發ActiveX控制項及製作CAB包總結(3)
下載