




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员、用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法。 使用 ActiveX, 可轻松方便的在 Web页中插入 多媒体效果、 交互式对象、以及复杂程序,创建用户体验相当的高质量多媒体 CD-ROM 。 简单的说,用activeX和js差不多,但是有些是js无法实现的,这个时候就可以考虑一下activeX,一般要求是在客户端执行的程序,比如对本机的串口操作等,下面来简单介绍下如何用C#自己开发一个activeX组件,并在web中应用更改“项目属性-应用程序-
2、程序集信息”设置,勾选“使程序集 COM 可见”:更改“项目属性-生成”设置,勾选“为 COM 互操作 注册”修改AssemblyInfo.cs文件,添加assembly: AllowPartiallyTrustedCallers()项(需要引用System.Security名称空间):using System.Runtime.InteropServices;using System.Security;/ 有关程序集的常规信息通过下列属性集/ 控制。更改这些属性值可修改/ 与程序集关联的信息。assembly: AssemblyTitle(ActivexDemo)assembly: Assem
3、blyDescription()assembly: AssemblyConfiguration()assembly: AssemblyCompany(微软中国)assembly: AssemblyProduct(ActivexDemo)assembly: AssemblyCopyright(Copyright 微软中国 2012)assembly: AssemblyTrademark()assembly: AssemblyCulture()/ 将 ComVisible 设置为 false 使此程序集中的类型/ 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,/ 则将该类型上的
4、 ComVisible 属性设置为 true。assembly: ComVisible(true)/ 如果此项目向 COM 公开,则下列 GUID 用于类型库的 IDassembly: Guid(f-5c1e-4c24-b2e0-c2f172e753a4)/ 程序集的版本信息由下面四个值组成:/主版本/ 次版本 / 内部版本号/ 修订号/ 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,/ 方法是按如下所示使用“*”:/ assembly: AssemblyVersion(1.0.*)assembly: AssemblyVersion()assembly: As
5、semblyFileVersion()assembly: AllowPartiallyTrustedCallers()添加一个Windows用户控件:完成控件开发后,为了使该用户控件作为一个ActiveX控件进行使用,还需要做以下修改:首先,为控件类添加GUID,这个编号将用于B/S系统的客户端调用时使用(可以使用 工具-创建GUID 菜单创建一个GUID):或者通过程序获得MessageBox.Show(Guid.NewGuid().ToString();为了提高程序的安全性,以便在客户端安装的时候在浏览器提高信任度,我们需要实现接口IObjectSafetyusingSyst
6、em;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceActivexDemoComImport,GuidAttribute(CB5BDC81-93C1-11CF-8F20-00805F2CD064)InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)publicinterfaceIObjectSafetyPreserveSigintGetInterface
7、SafetyOptions(refGuidriid,MarshalAs(UnmanagedType.U4)refintpdwSupportedOptions,MarshalAs(UnmanagedType.U4)refintpdwEnabledOptions);PreserveSig()intSetInterfaceSafetyOptions(refGuidriid,MarshalAs(UnmanagedType.U4)intdwOptionSetMask,MarshalAs(UnmanagedType.U4)intdwEnabledOptions);然后在代码中实现接口即可usingSyst
8、em;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;/Guid引用namespaceActivexDemoGuid(0b6ed426-9e67-4cf3-99da-8a346a98e5c6)publicpartialclassUc:UserControl,IOb
9、jectSafetypublicUc()InitializeComponent();#regionIObjectSafety成员privateconststring_IID_IDispatch=-0000-0000-C000-6;privateconststring_IID_IDispatchEx=a6ef9860-c720-11d0-9337-00a0c90dcaa9;privateconststring_IID_IPersistStorage=A-0000-0000-C000-6;privateconststring_IID_IPersistStream=-0000-0000-C000-6
10、;privateconststring_IID_IPersistPropertyBag=37D84F60-42CB-11CE-8135-00AA004BB851;privateconstintINTERFACESAFE_FOR_UNTRUSTED_CALLER=0x;privateconstintINTERFACESAFE_FOR_UNTRUSTED_DATA=0x;privateconstintS_OK=0;privateconstintE_FAIL=unchecked(int)0x);privateconstintE_NOINTERFACE=unchecked(int)0x);privat
11、ebool_fSafeForScripting=true;privatebool_fSafeForInitializing=true;publicintGetInterfaceSafetyOptions(refGuidriid,refintpdwSupportedOptions,refintpdwEnabledOptions)intRslt=E_FAIL;stringstrGUID=riid.ToString(B);pdwSupportedOptions=INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA;sw
12、itch(strGUID)case_IID_IDispatch:case_IID_IDispatchEx:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForScripting=true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_CALLER;break;case_IID_IPersistStorage:case_IID_IPersistStream:case_IID_IPersistPropertyBag:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForInitializin
13、g=true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt=E_NOINTERFACE;break;returnRslt;publicintSetInterfaceSafetyOptions(refGuidriid,intdwOptionSetMask,intdwEnabledOptions)intRslt=E_FAIL;stringstrGUID=riid.ToString(B);switch(strGUID)case_IID_IDispatch:case_IID_IDispatchEx:if(dw
14、EnabledOptions&dwOptionSetMask)=INTERFACESAFE_FOR_UNTRUSTED_CALLER)&(_fSafeForScripting=true)Rslt=S_OK;break;case_IID_IPersistStorage:case_IID_IPersistStream:case_IID_IPersistPropertyBag:if(dwEnabledOptions&dwOptionSetMask)=INTERFACESAFE_FOR_UNTRUSTED_DATA)&(_fSafeForInitializing=true)Rslt=S_OK;brea
15、k;default:Rslt=E_NOINTERFACE;break;returnRslt;#endregion这样ActiveX的基本设置完成了,这个时候我们就可以利用ActiveX实现自己需要的功能了,我们两个举个例子一、 在页面中放置一个文本框和一个按钮,当点击按钮的时候,把ActiveX中的值传到页面的文本框中二、 在ActiveX的控件中放置一个按钮,当触发按钮事件后,把ActiveX的值传到页面的文本框中上面这两个例子其实就是想实现如何实现js调用ActiveX和ActiveX调用页面的Js的,现在我们写一下代码,先看看第一种情况,在ActiveX中我们写了一个GetStr方法,用
16、来返回一个值,然后把这个值传到页面中 public string GetStr() return 这是从ActiveX传过来的值;好了,现在我们需要新建一个安装文件1、 新建一个安装项目2、在项目上点右键,【添加】-【项目输出】,选择上边的项目如果有多个项目,可以选择需要安装的项目就可以了点击项目,按下“F4”,设置属性 3、 生成项目 会生成两个文件,一个exe文件和一个msi文件 然后把这两个文件拷到项目的lib文件夹下面1、 新建一个页面,添加下面的代码 然后在页面中添加javascript代码,按钮和文本框 无标题页functionpassValue()document.getElem
17、entById(textValue).value=document.getElementById(helloBossma).GetStr();这个时候我们就可以打开浏览器浏览页面了运行加载提示的加载项就可以了 这个时候我们点击按钮传值就可以把ActiveX中的值传过来了 接着看看如何用ActiveX调用Javascript首先在ActiveX中写一个方法用来将页面的js函数传过来。页面的js函数window.onload=function() document.getElementById(helloBossma).regJs(window,show); function show(str) document.getElementById(text1).value=str; ActiveX中我们需要添加引用usingmshtml;privateIHTMLWindow2temphtml=null;privatestringfunctionstr=;publicvoidRegJs(objectwin,stringfuc)temphtml=(IHTMLWindow2)win;if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年知识产权保护与运用策略培训及咨询合作协议
- 2025年校园文化墙设计、施工与长期保养维护服务协议
- 2025年新型金融衍生品销售代理提成及业绩考核协议
- 内科题库及答案章节
- 2025年食品冷链物流温控技术与冷链物流企业物流服务质量监控与风险防范报告
- 麻醉科无菌技术考试试题及答案
- 2025年企业内部高效招聘与人才选拔系统服务合同
- 2025年行业市场调研结果保密及竞业限制服务合同样本
- 2025年生物制药领域临床试验数据知识产权归属及使用合同补充
- 2025年风力发电机组性能优化与安全检测服务协议
- 腮红画法教学课件
- 二零二五版便利店员工劳动合同模板
- 弱电设备运输方案模板(3篇)
- 2025-2030中国重水市场运行态势与未来竞争力剖析报告
- 企业职工感恩教育
- GB 17051-2025二次供水设施卫生规范
- 山西线上红娘培训课件
- 品牌管理部组织架构及岗位职责
- 临沧市市级机关遴选真题2024
- 【物化生 高考西北卷】2025年高考招生考试真题物理+化学+生物试卷(适用陕西、山西、青海、宁夏四省)
- 2025-2030中国工控机(IPC)行业应用态势与前景动态预测报告
评论
0/150
提交评论