用C#寫ActiveX

來源:互聯網
上載者:User
 建“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)

 

下載

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.