.NET环境下创建Activex (转)
雖然不倡導在Web環境下使用Activex控件,但有時會遇到與底層通信的問題,這時利用Activex可以比較好的解決,工商銀行的U盾就是如此。Activex還有一個好處就是可以把winform下封裝的用戶控件直接當做web控件來使用。在開發過程中走過許多彎路,現在總結出開發步驟,希望對大家有所助益。
為了盡量簡單中說明問題,我們采用一個幾乎無實際意義的例子。例子中使用的編程語言是C#。
整個示例包括三部分:winform下的用戶控件,安裝文件,以及示例網站。安裝文件的作用是使示例網站中能夠使用winform下的用戶控件。
一. Winform下用戶控件的創建
1.打開vs2010,新建項目->Visual C#->Windows->類庫,名稱為MyUserControlLib,解決方案名稱為UCDemo。
2.刪除自動創建的Class1.cs文件,然后在MyUserControlLib上右鍵->添加->新建項,在彈出的窗口中選擇“用戶控件”,名稱為MyUC,此時會出現一個類似于winform設計界面,我們在上面從工具箱中拖動一個Label和Textbox在上面,效果如下:
3.右鍵->查看代碼,修改代碼如下:
namespace MyUserControlLib
{
??? public partial class MyUC : UserControl
??? {
??????? public string TestString
??????? {
??????????? get { return textBox1.Text; }
??????????? set { textBox1.Text = value; }
??????? }
??????? public MyUC()
??????? {
??????????? InitializeComponent();
??????? }
??? }
}
二. 將用戶控件變成Com可見
1.在MyUserControlLib項目上點擊右鍵,選擇屬性,將打開項目屬性面板,選擇應用程序標簽頁,點擊“程序集信息”按鈕,在彈出的窗口中勾選“使程序集COM可見”
2.切換到生成標簽頁,然后勾選“為Com互操作注冊”,在該頁面的最上面,有一個配置選項,切換到realse,并再次勾選“為Com互操作注冊”。這樣無論是在debug還是在release狀態下,都可以把用戶控件當做com接口使用.
?
?
3.再次打開MyUC.cs,修改代碼如下:
using System; using System.Windows.Forms;using System.Runtime.InteropServices; namespace MyUserControlLib
{
??? //ProgID 是暴露給com接口的類的唯一名稱
??? [ProgId("MyUC")]
??? //ClassInterface 是包裝MyUC類的Com接口類型
??? [ClassInterface(ClassInterfaceType.AutoDual)]???
??? //Guid 是類的唯一標識符,創建方法將在下面介紹
??? [Guid("7EC724B9-E72C-4886-A802-154D8C25A01D")]
??? //ComVisible 設置類或字段是否Com可見
??? [ComVisible(true)]
??? public partial class MyUC : UserControl
??? {
??????? [ComVisible(true)]
??????? public string TestString
??????? {
??????????? get { return textBox1.Text; }
??????????? set { textBox1.Text = value; }
??????? }
??????? public MyUC()
??????? {
??????????? InitializeComponent();
??????? }
??? }
}
- ProgID 是暴露給com接口的類的唯一名稱
- ClassInterface 是包裝MyUC類的Com接口類型
- Guid 是類的唯一標識符,創建方法將在下面介紹
- ComVisible 設置類或字段是否Com可見
到此為止,winform的自定義控件創建完成。
三. 創建安裝文件
安裝文件的創建方法很簡單,在vs2010中,新建->項目->其他項目類型->安裝和部署->Visual Studio Installer,選擇安裝項目,點擊確定
然后單擊“應用程序文件夾”,在右側空白處右鍵->添加->項目輸出,在彈出的窗口中選擇MyUserControlLib,選擇主輸出,再點擊確定即可
?
編譯,安裝文件的創建完成。
四.創建測試網站
1.文件->添加->新建網站,在彈出的窗口中單擊確定
2.在網站中添加一個MyUCTest.aspx頁面,在<body></body>中添加如下代碼:
<a href="Setup1.msi">安裝插件</a>??????? <br />
??????? <br />
??????? <input id="Button1" type="button" value="調用插件" οnclick="test()" /><br />
??????? <object id="MyUC" classid="clsid:7EC724B9-E72C-4886-A802-154D8C25A01D" width="200"
??????????? height="100" />
??????????? </object> 3.在head中添加如下代碼 <script type="text/javascript">
??????????? function test() {
??????????? alert(document.MyUC.TestString);
??????? }??
??? </script> 從這里我們可以看出,如果要讓自定義控件與js進行交互,直接用對應的字段即可,但是一定要注意的是這個字段必須是[ComVisible(true)]特性 4.打開安裝文件項目的debug文件夾,把其中的Setup1.msi復制到網站下 5.在瀏覽器中查看,首次不能正常顯示,點擊安裝插件鏈接,安裝過后再次刷新頁面應該就能正常顯示 <A href="http://images.cnblogs.com/cnblogs_com/liulixiang/201105/201105231539043084.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=17 border=0 alt=17 src="http://images.cnblogs.com/cnblogs_com/liulixiang/201105/201105231539041655.png" width=340 height=220></A>
如果已久不能正常顯示,請把localhost添加為可信網站,添加方法是:internet選項->安全->可信站點->站點,然后把localhost添加到可信站點中即可
轉載于:https://www.cnblogs.com/sgivee/archive/2011/08/10/2133500.html
總結
以上是生活随笔為你收集整理的.NET环境下创建Activex (转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搞特务的程序
- 下一篇: 固定导航在网页设计中应用的22个优秀案例