您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 使用C开发ActiveX控件
使用C#开发ActiveX控件ActiveX是一个开放的集成平台,为开发人员、用户和Web生产商提供了一个快速而简便的在Internet和Intranet创建程序集成和内容的方法。使用ActiveX,可轻松方便的在Web页中插入多媒体效果、交互式对象、以及复杂程序,创建用户体验相当的高质量多媒体CD-ROM。简单的说,用activeX和js差不多,但是有些是js无法实现的,这个时候就可以考虑一下activeX,一般要求是在客户端执行的程序,比如对本机的串口操作等,下面来简单介绍下如何用C#自己开发一个activeX组件,并在web中应用更改“项目属性-应用程序-程序集信息”设置,勾选“使程序集COM可见”:更改“项目属性-生成”设置,勾选“为COM互操作注册”修改AssemblyInfo.cs文件,添加[assembly:AllowPartiallyTrustedCallers()]项(需要引用System.Security名称空间):usingSystem.Runtime.InteropServices;usingSystem.Security;//有关程序集的常规信息通过下列属性集//控制。更改这些属性值可修改//与程序集关联的信息。[assembly:AssemblyTitle(ActivexDemo)][assembly:AssemblyDescription()][assembly:AssemblyConfiguration()][assembly:AssemblyCompany(微软中国)][assembly:AssemblyProduct(ActivexDemo)][assembly:AssemblyCopyright(Copyright©微软中国2012)][assembly:AssemblyTrademark()][assembly:AssemblyCulture()]//将ComVisible设置为false使此程序集中的类型//对COM组件不可见。如果需要从COM访问此程序集中的类型,//则将该类型上的ComVisible属性设置为true。[assembly:ComVisible(true)]//如果此项目向COM公开,则下列GUID用于类型库的ID[assembly:Guid(f5438267-5c1e-4c24-b2e0-c2f172e753a4)]//程序集的版本信息由下面四个值组成:////主版本//次版本//内部版本号//修订号////可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,//方法是按如下所示使用“*”://[assembly:AssemblyVersion(1.0.*)][assembly:AssemblyVersion(1.0.0.0)][assembly:AssemblyFileVersion(1.0.0.0)][assembly:AllowPartiallyTrustedCallers()]添加一个Windows用户控件:完成控件开发后,为了使该用户控件作为一个ActiveX控件进行使用,还需要做以下修改:首先,为控件类添加GUID,这个编号将用于B/S系统的客户端调用时使用(可以使用工具-创建GUID菜单创建一个GUID):或者通过程序获得MessageBox.Show(Guid.NewGuid().ToString());为了提高程序的安全性,以便在客户端安装的时候在浏览器提高信任度,我们需要实现接口IObjectSafetyusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceActivexDemo{[ComImport,GuidAttribute(CB5BDC81-93C1-11CF-8F20-00805F2CD064)][InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]publicinterfaceIObjectSafety{[PreserveSig]intGetInterfaceSafetyOptions(refGuidriid,[MarshalAs(UnmanagedType.U4)]refintpdwSupportedOptions,[MarshalAs(UnmanagedType.U4)]refintpdwEnabledOptions);[PreserveSig()]intSetInterfaceSafetyOptions(refGuidriid,[MarshalAs(UnmanagedType.U4)]intdwOptionSetMask,[MarshalAs(UnmanagedType.U4)]intdwEnabledOptions);}然后在代码中实现接口即可usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;//Guid引用namespaceActivexDemo{[Guid(0b6ed426-9e67-4cf3-99da-8a346a98e5c6)]publicpartialclassUc:UserControl,IObjectSafety{publicUc(){InitializeComponent();}#regionIObjectSafety成员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={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_FAIL=unchecked((int)0x80004005);privateconstintE_NOINTERFACE=unchecked((int)0x80004002);privatebool_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;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:case_IID_IPersistStream:case_IID_IPersistPropertyBag:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForInitializing==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(((dwEnabledOptions&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;break;default:Rslt=E_NOINTERFACE;break;}returnRslt;}#endregion}}这样ActiveX的基本设置完成了,这个时候我们就可以利用ActiveX实现自己需要的功能了,我们两个举个例子一、在页面中放置一个文本框和一个按钮,当点击按钮的时候,把ActiveX中的值传到页面的文本框中二、在ActiveX的控件中放置一个按钮,当触发按钮事件后,把ActiveX的值传到页面的文本框中上面这两个例子其实就是想实现如何实现js调用ActiveX和ActiveX调用页面的Js的,现在我们写一下代码,先看看第一种情况,在ActiveX中我们写了一个GetStr方法,用来返回一个值,然后把这个值传到页面中publicstringGetStr(){return这是从ActiveX传过来的值;}好了,现在我们需要新建一个安装文件1、新建一个安装项目2、在项目上点右键,【添加】-【项目输出】,选择上边的项目如果有多个项目,可以选择需要安装的项目就可以了点击项目,按下“F4”,设置属性3、生成项目会生成两个文件,一个exe文件和一个msi文件然后把这两个文件拷到项目的lib文件夹下面1、新建一个页面,添加下面的代码objectclassid=clsid:0b6ed426-9e67-4cf3-99da-8a346a98e5c6codebase=lib/setup.exewidth=200height=40id=helloBossma/object然后在页面中添加javascript代码,按
本文标题:使用C开发ActiveX控件
链接地址:https://www.777doc.com/doc-2686983 .html