VS2012.C#开发ActiveX组件流程以及注意事项v1.0.docx_第1页
VS2012.C#开发ActiveX组件流程以及注意事项v1.0.docx_第2页
VS2012.C#开发ActiveX组件流程以及注意事项v1.0.docx_第3页
VS2012.C#开发ActiveX组件流程以及注意事项v1.0.docx_第4页
VS2012.C#开发ActiveX组件流程以及注意事项v1.0.docx_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

C#开发ActiveX组件流程以及注意事项唯笑志在QQ群:54256083ITER职业交流群:141588103软件破解技术群:52598922目录C#开发ActiveX组件流程以及注意事项1一前言2二开发环境2三组件开发过程23.1 新建“MyActiveX”项目23.2 在ActiveXControl组件类上增加属性和方法33.3 增加客户端信任代码53.4修改AssemblyInfo.cs 文件83.5 修改ActiveXControl项目属性9四ActiveX控件的打包发布114.1 添加“安装和部署”工程124.2 添加项目主输出134.3 设置Register 属性为vsdrpCOM134.4 查看是否注册了ActiveX组件14五测试和加载ActiveX过程155.1 建立Web 应用程序项目155.2 测试结果165.3 IE设置17六自动安装ActiveX196.1 打包cab安装包196.2 自动安装21七引用程序设计说明22一前言ActiveX 控件以前也叫做OLE 控件或OCX 控件,它是一些软件组件或对象,可以将其插入到WEB 网页或其它应用程序中。使用ActiveX 插件,可以轻松方便的在Web 页中插入多媒体效果、交互式对象以及复杂程序等等。通常使用MFC或VB 开发ActiveX 控件,本文章来讨论Microsoft Visual Studio 开发工具实现开发ActiveX组件整个过程。在开发过程中有些注意事项和细节需要注意。二开发环境开发工具:VS2012操作系统:Windows 8.1.NET版本:2.0及以上版本开发语言:C#三组件开发过程3.1 新建“MyActiveX”项目把项目里默认建立的类库删除掉。新建“用户控件”,并且命名为“ActiveXControl”。如下图:图 3.1-1 项目组件3.2 在ActiveXControl组件类上增加属性和方法ComVisible(true) /允许进行COM注册 Guid(C341DFF3-BA35-4AA4-8FD1-EB7715F75E86) /标识在注册表中唯一的GUID码。 ClassInterface(ClassInterfaceType.AutoDual) /标识为某个类生成的类接口的类型。 public partial class ActiveXControl : ObjectSafety public ActiveXControl() InitializeComponent(); / / 组件本身内部的事件,并把信息显示在组件的Label上。 / / / private void button1_Click(object sender, EventArgs e) this.label1.Text = 单击成功; / / 这是一个公开的方法,供网页的JAVASCRIPT调用的,进行交互。 / public void Test() label1.Text = 测试成功; 在ActiveXControl组件中入一个Button和Label控件,Button的单击事件对应着button1_Click事件函数,并且改变Label的Text属性,并且改变ActiveXControl的背景颜色。如下图:图3.2-1 组件界面注:可以在菜单“工具”中的“创建GUID”中创建唯一的GUID码,与类的Guid(C341DFF3-BA35-4AA4-8FD1-EB7715F75E86)标识有关。如下图:图3.1-2 创建GUID码注:必须在组件类上标识Guid(C341DFF3-BA35-4AA4-8FD1-EB7715F75E86)属性,因为有可能每次生成项目的时候,这个GUID都会改变,对于应用系统来讲,最好是固定的,这样就不需要重新部署了。3.3 增加客户端信任代码为了让ActiveX 控件获取客户端的信任, 控件类还需要实现一个名为“IObjectSafety”的接口,先创建该接口,并且定义该接口中方法,如下代码。(注:不能修改该接口的GUID 值)。 ComImport, Guid(4A359FBB-C9A4-494E-B048-AC068DB4FCB2) InterfaceType(ComInterfaceType.InterfaceIsIUnknown) public interface IObjectSafety PreserveSig int GetInterfaceSafetyOptions(ref Guid riid, MarshalAs(UnmanagedType.U4) ref int pdwSupportedOptions, MarshalAs(UnmanagedType.U4) ref int pdwEnabledOptions); PreserveSig() int SetInterfaceSafetyOptions(ref Guid riid, MarshalAs(UnmanagedType.U4) int dwOptionSetMask, MarshalAs(UnmanagedType.U4) int dwEnabledOptions); 再新建一个“用户组件”,命名为“ObjectSafety”,并实现IObjectSafety接口,以及该接口下的函数,代码如下:public class ObjectSafety : UserControl, IObjectSafety private const string _IID_IDispatch = 00020400-0000-0000-C000-000000000046; private const string _IID_IDispatchEx = a6ef9860-c720-11d0-9337-00a0c90dcaa9; private const string _IID_IPersistStorage = 0000010A-0000-0000-C000-000000000046; private const string _IID_IPersistStream = 00000109-0000-0000-C000-000000000046; private const string _IID_IPersistPropertyBag = 37D84F60-42CB-11CE-8135-00AA004BB851; private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001; private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002; private const int S_OK = 0; private const int E_FAIL = unchecked(int)0x80004005); private const int E_NOINTERFACE = unchecked(int)0x80004002); private bool _fSafeForScripting = true; private bool _fSafeForInitializing = true; public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions) int Rslt = E_FAIL; string strGUID = 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; return Rslt; public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) int Rslt = E_FAIL; string strGUID = 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; return Rslt; “ActiveXControl”组件继承“ObjectSafety”组件,使之继承UserControl组件和IObjectSafety接口,代码:public partial class ActiveXControl : ObjectSafety3.4修改AssemblyInfo.cs 文件如下图:图3.4-1 程序集标识文件 引用命名空间:using System.Security;添加:assembly: AllowPartiallyTrustedCallers()代码如下:图3.4-2 修改程序集标识文件3.5 修改ActiveXControl项目属性右键单击ActiveXControl项目,选择“属性”,如下图:图3.5-1 项目属性页选择“程序集信息”,如下图:图3.5-2 程序集信息选择“使程序集COM可见”选项,并单击“确定”按钮。选择“ActiveXControl ”项目属性的“生成”选项卡,并勾选“为COM 互操作注册(P)”,此处是在debug 状态下修改的,如果是调到release 状态下,还需要再设置一下,如下图:图3.5-3 生成页属性到此为止,ActiveX组件就开发完成了,如果涉及到复杂的业务,例如:访问数据库、GDI+以及其他的操作,都可以完成了。可以生成此项目了。四ActiveX控件的打包发布ActiveX 控件可以通过Visual Studio 的“安装和部署”进行部署。需要注意的有两点:n 将以上创建的用户控件项目作为主输出项目;n 设置其Register 属性为vsdrpCOM;4.1 添加“安装和部署”工程方法:右键“解决方案”添加新建项目,如下图:图4.1-1 新建打包项目图4.1-2 安装项目4.2 添加项目主输出如下图:图4.2-1 添加项目输出图4.2-2 添加主输出4.3 设置Register 属性为vsdrpCOM在解决方案中选中“主输出来自ActiveX( 活动)”。如下图:图4.3-1 设置注册COM方式现在就可以生成发布项目了,在客户端的电脑上都需要安装这个打包程序,用于注册ActiveX组件。如果,在本机(开发机)测试的话,在生成“ActiveXControl”项目的时候,默认可能已经进行注册,就不需要安装打包后的程序的。4.4 查看是否注册了ActiveX组件可以使用“OLEVIEW.EXE”工具查看ActiveX是否被注册了,如下图:图4.4-1 查看ActiveX组件五测试和加载ActiveX过程5.1 建立Web 应用程序项目建立一个Web 应用程序项目,在测试页面的HTML 代码中添加对ActiveX 控件的引用,并可以通过Javascript 调用控件的公共成员(注意这里的clsid 后面的值就是前面为用户控件类设置的GUID),如下代码: function test() var obj = document.getElementById(ActiveObj);/获得组件实例 obj.Test(); /调用组件内部的函数 /引用组件,clsid就是组件类的GUID。 5.2 测试结果 如下图:图 5.2-1 测试成功 组件内部事件和客户端调用组件内部函数都成功。5.3 IE设置如果是发布成网站,需要对IE浏览器进行设置,根据不同版本的IE浏览器的安全权限不一样,一般说来,需要把网站的URL地址设置成“可信任的站点”,另外,把“自定义级别”设置为“低”。如下图:图5.3-1 IE选项图5.3-2 受信任的站点图5.3-3 自定义级别六自动安装ActiveX6.1 打包cab安装包6.1.1 准备安装工具下载工具,使用CAB SDK 中的工具CABARC.EXE (下载地址/kb/310618),创建并编写INF 文件,把inf和msi打包成cab包。解压后的工具如图:图6.1-1 打包CAB工具6.1.2 编辑Inf文件,新建文件文件,把文件命名为“MyActiveX.INF”编辑文件内容如下:versionsignature=$CHICAGO$AdvancedINF=2.0Setup Hookshook1=hook1hook1ru

温馨提示

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

最新文档

评论

0/150

提交评论