C#ActiveX控件开发,打包cab安装部署,含源码及全过程开发文档_第1页
C#ActiveX控件开发,打包cab安装部署,含源码及全过程开发文档_第2页
C#ActiveX控件开发,打包cab安装部署,含源码及全过程开发文档_第3页
C#ActiveX控件开发,打包cab安装部署,含源码及全过程开发文档_第4页
C#ActiveX控件开发,打包cab安装部署,含源码及全过程开发文档_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.问题场景在C/S架构的系统中,客户端要实现某些业务功能,可以通过安装相关的应用程序集来方便的实现。同样的需求,在B/S架构的系统里实现起来却比较困难。因为所有的程序都放在服务器端,客户端只是采用浏览器,通过HTTP协议来访问服务器端。比较成熟的解决办法是开发ActiveX控件安装到客户端,这样客户端的浏览器就可以访问本地的ActiveX控件来执行相关的本地操作。通常开发ActiveX使用C,C+或VB开发,本文将要谈论的,就是使用C#开发一个ActiveX控件。3. 注意的地方,C#开发的ActiveX控件只可在装有Framework的系统上才能用。2.开发工具VisualStudio20

2、10NET版本:2.0开发语言:C#3.ActiveX控件项目创建(1),新建一个【Windows窗体控件库项目】,项目名为ActiveXDemo选择.NETFramwork2.0版本,因为.Net2.0安装文件只有20多M,客户端容易接受,而且如今多数家用电脑都装了.Net2.0,需要更改两个地方的设置,选中刚创建的ActiveXDemo项目:1).右键选择“属性>>应用程序>>程序集信息”设置,勾选“使程序集COM可见”:debug2).右键选择“属性>>应用程序>>生成”设置,勾选“为COM互操作注册”(注意,此处如果是.状态下修改的,那么

3、在调到release状态下还需要再设置一次):解印希霍舷:4二禁止显云書舌;捋書告视为措滾无迥)©缶0JC4. ActiveX控件功能添加(1),添加一个用户控件r爲如気顷-ActiveXDemo已安芸的模扳率序疥:默认這JVisualC#项WebWindowsFormsWPF代码ReportingWorkflow援匚Windows壹忧VisualC#项VisualC#项VisualC#项用户控件VisualC#项Visual3项咲于”框VisualC#项Crystal报表VisualC#项名称(NJ:MiugoXxG(2),为了使该用户控件作为一个ActiveX控件进行使用,还需要

4、做以下修改:首先,为控件类MiugoX.cs添加GUID,这个编号将用于B/S系统的客户端调用时使用(可以使用工具-创建GUID菜单创建一个GUID):Guid("DF0769A5-99D3-4BE0-90B8-91C65A92118C"),Progld("ActiveXDemo.MiugoX"),ComVisible(true)publicpartialclassMiugoX:UserControl,lObjectSafety/DF0769A5-99D3-4BE0-90B8-91C65A92118C就,a是(?刚?刚?创?建?§的?Guid,

5、为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“lObjectSafety”的接口。先创建该接口(注意,不能修改该接口的GUID值):添加一个接口lObjectSafety,实现该接口的目的就是提高程序的安全性,以便客户端IE在不更改设置的情况下可以预行该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需要继承并实现lObjectSafety接口,需要引用usingSystem.Security.Cryptography禾口usingSystem.Runtime.InteropServices;两个命名空间Miiugo.cs实现的接口成员如下: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),按照开发Windows用户控件一样的思路完成该控件的开发,本例中主要实现了三个业务功能,第一是创建文件,第二是获取某目录下的文件,第三是显示“你好,ActiveX”的提示消息。用户控件设计界面:文件

16、名:|创建|获取匚:文程序功能代码: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成员代码省略,请参考第段#endregionpublicMiugoX()InitializeComponent();labelResult.Text=""publicvoidSayHelloWord()MessageBoxShow("你好ActiveX!");publicvoidShowMessage(stringms

18、g)MessageBoxShow(msg);publicstringGetHelloWord()return"HelloActiveX"publicvoidCreateText()labelResult.Text=""if(txtFileName.Text="")labelResult.Text="请输入文件名?"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+"创建成功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这一步,一个简单的ActiveX控件已开发完成。5. ActiveX控件调试并且可GUID:建立一个Web应用程序项目,在测试页面的html或aspx页面代码中添加对ActiveX控件的引用,以通过Javascript调用控件的公共成员(注意这里clsid后面的值即为前面为用户控件类设置的<objectid="activeXDemo"classid="clsid:DF07

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论