版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中考试题目及答案
- 吹膜考试题及答案
- 护理护理评估方法
- 护理护理实践指南
- 护理教学课件开发与教学设计流程优化
- 护理沟通中的沟通效果评估
- 布病护理的法律法规
- 护理文件书写的跨文化沟通
- 护理信息化技术应用
- 护理专业科研方法与论文写作
- 福建泉州市2025-2026学年下学期期末高二数学参考试题答案
- 2026广东广州花都汽车城集团有限公司第一次招聘6人参考题库【综合卷】附答案详解
- 2026年冀教版(三起)小学英语五年级下册期末学情自测卷及答案
- 太原市2026届小学六年级小升初英语模拟试卷2
- 人教部编版六升七语文暑假衔接作业完整版(可直接打印)
- JG/T 287-2013保温装饰板外墙外保温系统材料
- 《接发列车工作 》课件(上)
- 人教版3到6年级单词表打印版(小学必背单词3000打印版)
- 四级公路养护与管理方案
- 2024年湖北高中学业水平合格性考试物理试卷真题(含答案详解)
- CJ/T 111-2018 卡套式铜制管接头
评论
0/150
提交评论