C#ActiveX控件開發(fā),打包c(diǎn)ab安裝部署,含源碼及全過程開發(fā)文檔_第1頁(yè)
C#ActiveX控件開發(fā),打包c(diǎn)ab安裝部署,含源碼及全過程開發(fā)文檔_第2頁(yè)
C#ActiveX控件開發(fā),打包c(diǎn)ab安裝部署,含源碼及全過程開發(fā)文檔_第3頁(yè)
C#ActiveX控件開發(fā),打包c(diǎn)ab安裝部署,含源碼及全過程開發(fā)文檔_第4頁(yè)
C#ActiveX控件開發(fā),打包c(diǎn)ab安裝部署,含源碼及全過程開發(fā)文檔_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1.問題場(chǎng)景在C/S架構(gòu)的系統(tǒng)中,客戶端要實(shí)現(xiàn)某些業(yè)務(wù)功能,可以通過安裝相關(guān)的應(yīng)用程序集來方便的實(shí)現(xiàn)。同樣的需求,在B/S架構(gòu)的系統(tǒng)里實(shí)現(xiàn)起來卻比較困難。因?yàn)樗械某绦蚨挤旁诜?wù)器端,客戶端只是采用瀏覽器,通過HTTP協(xié)議來訪問服務(wù)器端。比較成熟的解決辦法是開發(fā)ActiveX控件安裝到客戶端,這樣客戶端的瀏覽器就可以訪問本地的ActiveX控件來執(zhí)行相關(guān)的本地操作。通常開發(fā)ActiveX使用C,C+或VB開發(fā),本文將要談?wù)摰?,就是使用C#開發(fā)一個(gè)ActiveX控件。3. 注意的地方,C#開發(fā)的ActiveX控件只可在裝有Framework的系統(tǒng)上才能用。2.開發(fā)工具VisualStudio20

2、10NET版本:2.0開發(fā)語(yǔ)言:C#3.ActiveX控件項(xiàng)目創(chuàng)建(1),新建一個(gè)【W(wǎng)indows窗體控件庫(kù)項(xiàng)目】,項(xiàng)目名為ActiveXDemo選擇.NETFramwork2.0版本,因?yàn)?Net2.0安裝文件只有20多M,客戶端容易接受,而且如今多數(shù)家用電腦都裝了.Net2.0,需要更改兩個(gè)地方的設(shè)置,選中剛創(chuàng)建的ActiveXDemo項(xiàng)目:1).右鍵選擇“屬性>>應(yīng)用程序>>程序集信息”設(shè)置,勾選“使程序集COM可見”:debug2).右鍵選擇“屬性>>應(yīng)用程序>>生成”設(shè)置,勾選“為COM互操作注冊(cè)”(注意,此處如果是.狀態(tài)下修改的,那么

3、在調(diào)到release狀態(tài)下還需要再設(shè)置一次):解印?;粝希?二禁止顯云書舌;捋書告視為措滾無迥)©缶0JC4. ActiveX控件功能添加(1),添加一個(gè)用戶控件r爲(wèi)如気頃-ActiveXDemo已安蕓的模扳率序疥:默認(rèn)這JVisualC#項(xiàng)WebWindowsFormsWPF代碼ReportingWorkflow援匚Windows壹憂VisualC#項(xiàng)VisualC#項(xiàng)VisualC#項(xiàng)用戶控件VisualC#項(xiàng)Visual3項(xiàng)咲于”框VisualC#項(xiàng)Crystal報(bào)表VisualC#項(xiàng)名稱(NJ:MiugoXxG(2),為了使該用戶控件作為一個(gè)ActiveX控件進(jìn)行使用,還需要

4、做以下修改:首先,為控件類MiugoX.cs添加GUID,這個(gè)編號(hào)將用于B/S系統(tǒng)的客戶端調(diào)用時(shí)使用(可以使用工具-創(chuàng)建GUID菜單創(chuàng)建一個(gè)GUID):Guid("DF0769A5-99D3-4BE0-90B8-91C65A92118C"),Progld("ActiveXDemo.MiugoX"),ComVisible(true)publicpartialclassMiugoX:UserControl,lObjectSafety/DF0769A5-99D3-4BE0-90B8-91C65A92118C就,a是(?剛?剛?創(chuàng)?建?§的?Guid,

5、為了讓ActiveX控件獲得客戶端的信任,控件類還需要實(shí)現(xiàn)一個(gè)名為“l(fā)ObjectSafety”的接口。先創(chuàng)建該接口(注意,不能修改該接口的GUID值):添加一個(gè)接口lObjectSafety,實(shí)現(xiàn)該接口的目的就是提高程序的安全性,以便客戶端IE在不更改設(shè)置的情況下可以預(yù)行該ActiveX控件。接口成員如下:usingSystem;usingSystem.Runtime.InteropServices;namespaceActiveXDemoComImport,GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")Inte

6、rfaceTypeAttribute(ComInterfaceTypenterfaceIsIUnknown)publicinterfaceIObjectSafetyPreserveSigintGetInterfaceSafetyOptions(refGuidriid,MarshalAs(UnmanagedType.U4)refintpdwSupportedOptions,MarshalAs(UnmanagedType.U4)refintpdwEnabledOptions);PreserveSig()intSetlntefaceSafetyOptions(refGuidriid,MarshalA

7、s(UnmanagedType.U4)intdwOptionSetMask,MarshalAs(UnmanagedType.U4)intdwEnabledOptions);,用戶控件MiugoX.cs需要繼承并實(shí)現(xiàn)lObjectSafety接口,需要引用usingSystem.Security.Cryptography禾口usingSystem.Runtime.InteropServices;兩個(gè)命名空間Miiugo.cs實(shí)現(xiàn)的接口成員如下:usingSystem;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Window

8、s.Forms;usingSystem.IO;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.Runtime.InteropServices;namespaceActiveXDemoGuid("DF0769A5-99D3-4BE0-90B8-91C65A92118C"),ProgId("ActiveXDemo.MiugoX"),ComVisible(true)publicpartialclassMiugoX:UserControl,IObjectSafety#regionIOb

9、jectSafety成員privateconststring_IID_IDispatch="00020400-0000-0000-C000-000000000046"privateconststring_IID_IDispatchEx="a6ef9860-c720-11d0-9337-00a0c90dcaa9"privateconststring_IID_IPersistStorage="0000010A-0000-0000-C000-000000000046"privateconststring_IID_IPersistStream

10、="00000109-0000-0000-C000-000000000046"privateconststring_IID_IPersistPropertyBag="37D84F60-42CB-11CE-8135-00AA004BB851"privateconstintINTERFACESAFE_FOR_UNTRUSTED_CALLER=0x00000001;privateconstintINTERFACESAFE_FOR_UNTRUSTED_DATA=0x00000002;privateconstintS_OK=0;privateconstintE_F

11、AIL=unchecked(int)0x80004005);privateconstintE_NOINTERFACE=unchecked(int)0x80004002);privatebool_fSafeForScripting=true;privatebool_fSafeForlnitializing=true;publicintGetInterfaceSafetyOptions(refGuidriid,refintpdwSupportedOptions,refintpdwEnabledOptions)intRslt=E_FAIL;stringstrGUID=riid.ToString(&q

12、uot;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:cas

13、e_IID_IPersistStream:case_IID_IPersistPropertyBag:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForlnitializing=true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt=E_NOINTERFACE;break;returnRslt;publicintSetInterfaceSafetyOptions(refGuidriid,intdwOptionSetMask,intdwEnabledOptions)int

14、Rslt=E_FAIL;stringstrGUID=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_IPers

15、istPropertyBag:if(dwEnabledOptions&dwOptionSetMask)=INTERFACESAFE_FOR_UNTRUSTED_DATA)&&(_fSafeForlnitializing=true)Rslt=S_OK;break;default:Rslt=E_NOINTERFACE;break;returnRslt;#endregion(5),按照開發(fā)Windows用戶控件一樣的思路完成該控件的開發(fā),本例中主要實(shí)現(xiàn)了三個(gè)業(yè)務(wù)功能,第一是創(chuàng)建文件,第二是獲取某目錄下的文件,第三是顯示“你好,ActiveX”的提示消息。用戶控件設(shè)計(jì)界面:文件

16、名:|創(chuàng)建|獲取匚:文程序功能代碼:usingSystem;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Windows.Forms;usingSystem.IO;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.Runtime.lnteropServices;namespaceActiveXDemoGuid("DF0769A5-99D3-4BE0-90B8-91C65A92118C"),Progld("ActiveX

17、Demo.MiugoX"),ComVisible(true)publicpartialclassMiugoX:UserControl,IObjectSafety#regionIObjectSafety成員IObjectSafety成員代碼省略,請(qǐng)參考第段#endregionpublicMiugoX()InitializeComponent();labelResult.Text=""publicvoidSayHelloWord()MessageBoxShow("你好ActiveX!");publicvoidShowMessage(stringms

18、g)MessageBoxShow(msg);publicstringGetHelloWord()return"HelloActiveX"publicvoidCreateText()labelResult.Text=""if(txtFileName.Text="")labelResult.Text="請(qǐng)輸入文件名?"return;stringdir="C:ActiveDemo"stringfilePath=dir+""+txtFileName.Text+".txt&q

19、uot;if(!Directory.Exists(dir)Directory.CreateDirectory(dir);if(!File.Exists(filePath)File.CreateText(filePath);labelResult.Text+=filePath+"創(chuàng)建成功rn"elselabelResult.Text+=filePath+"已存在"publicvoidGetFiles()stringdir="C:ActiveDemo"if(!Directory.Exists(dir)Directory.CreateDir

20、ectory(dir);stringfileNameList=Directory.GetFiles(dir);if(fileNameList.Length=0)labelResult.Text="沒有文件"return;StringBuildersb=newStringBuilder();foreach(stringfileNameinfileNameList)sb.Append(fileName+"rn");labelResult.Text=""labelResult.Text=sb.ToString();privatevoidbt

21、nCreateFile_Click(objectsender,EventArgse)CreateText();privatevoidbtnGetFiles_Click(objectsender,EventArgse)GetFiles();,至U這一步,一個(gè)簡(jiǎn)單的ActiveX控件已開發(fā)完成。5. ActiveX控件調(diào)試并且可GUID:建立一個(gè)Web應(yīng)用程序項(xiàng)目,在測(cè)試頁(yè)面的html或aspx頁(yè)面代碼中添加對(duì)ActiveX控件的引用,以通過Javascript調(diào)用控件的公共成員(注意這里clsid后面的值即為前面為用戶控件類設(shè)置的<objectid="activeXDemo"classid="clsid:DF07

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論