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

下载本文档

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

文档简介

1. 问题场景 在C/S架构的系统中,客户端要实现某些业务功能,可以通过安装相关的应用程序集来方便的实现。同样的需求,在B/S架构的系统里实现起来却比较困难。因为所有的程序都放在服务器端,客户端只是采用浏览器,通过HTTP协议来访问服务器端。比较成熟的解决办法是开发ActiveX控件安装到客户端,这样客户端的浏览器就可以访问本地的ActiveX控件来执行相关的本地操作。通常开发ActiveX使用C,C+或VB开发,本文将要谈论的,就是使用C#开发一个ActiveX控件。3. 注意的地方,C#开发的ActiveX控件只可在装有Framework的系统上才能用。2. 开发工具Visual Studio 2010.NET版本:2.0开发语言:C#3. ActiveX控件项目创建(1), 新建一个【Windows窗体控件库项目】,项目名为ActiveXDemo选择.NET Framwork2.0版本,因为.Net2.0安装文件只有20多M,客户端容易接受,而且如今多数家用电脑都装了.Net2.0(2),需要更改两个地方的设置,选中刚创建的ActiveXDemo项目:1).右键选择“属性 应用程序 程序集信息”设置,勾选“使程序集 COM 可见”:2). 右键选择“属性 应用程序 生成”设置,勾选“为COM 互操作注册”(注意,此处如果是在debug状态下修改的,那么在调到release状态下还需要再设置一次):4. ActiveX控件功能添加(1),添加一个用户控件(2),为了使该用户控件作为一个ActiveX控件进行使用,还需要做以下修改:首先,为控件类MiugoX.cs添加GUID,这个编号将用于B/S系统的客户端调用时使用(可以使用 工具-创建GUID 菜单创建一个GUID):Guid(DF0769A5-99D3-4BE0-90B8-91C65A92118C), ProgId(ActiveXDemo.MiugoX), ComVisible(true) public partial class MiugoX : UserControl, IObjectSafety / DF0769A5-99D3-4BE0-90B8-91C65A92118C就是?刚?刚?创建的?Guid(3),为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“IObjectSafety”的接口。先创建该接口(注意,不能修改该接口的GUID值):添加一个接口IObjectSafety,实现该接口的目的就是提高程序的安全性,以便客户端IE在不更改设置的情况下可以预行该ActiveX控件。接口成员如下:using System;using System.Runtime.InteropServices;namespace ActiveXDemo ComImport, GuidAttribute(CB5BDC81-93C1-11CF-8F20-00805F2CD064) InterfaceTypeAttribute(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); (4),用户控件MiugoX.cs需要继承并实现IObjectSafety接口,需要引用using System.Security.Cryptography和using System.Runtime.InteropServices;两个命名空间Miiugo.cs实现的接口成员如下:using System;using System.ComponentModel;using System.Drawing;using System.Windows.Forms;using System.IO;using System.Text;using System.Security.Cryptography;using System.Runtime.InteropServices;namespace ActiveXDemo Guid(DF0769A5-99D3-4BE0-90B8-91C65A92118C), ProgId(ActiveXDemo.MiugoX), ComVisible(true) public partial class MiugoX : UserControl, IObjectSafety #region 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; #endregion(5),按照开发Windows用户控件一样的思路完成该控件的开发,本例中主要实现了三个业务功能,第一是创建文件,第二是获取某目录下的文件,第三是显示“你好,ActiveX”的提示消息。用户控件设计界面:程序功能代码:using System;using System.ComponentModel;using System.Drawing;using System.Windows.Forms;using System.IO;using System.Text;using System.Security.Cryptography;using System.Runtime.InteropServices;namespace ActiveXDemo Guid(DF0769A5-99D3-4BE0-90B8-91C65A92118C), ProgId(ActiveXDemo.MiugoX), ComVisible(true) public partial class MiugoX : UserControl, IObjectSafety #region IObjectSafety 成员 /IObjectSafety 成员代码省略,请参考第(4)段 #endregion public MiugoX() InitializeComponent(); labelResult.Text = ; public void SayHelloWord() MessageBox.Show(你好 ActiveX !); public void ShowMessage(string msg) MessageBox.Show(msg); public string GetHelloWord() return Hello ActiveX; public void CreateText() labelResult.Text = ; if (txtFileName.Text = ) labelResult.Text = 请输入文件名?; return; string dir = C:ActiveDemo; string filePath = dir + + txtFileName.Text + .txt; if (!Directory.Exists(dir) Directory.CreateDirectory(dir); if (!File.Exists(filePath) File.CreateText(filePath); labelResult.Text += filePath + 创建成功rn; else labelResult.Text += filePath + 已存在; public void GetFiles() string dir = C:ActiveDemo; if (!Directory.Exists(dir) Directory.CreateDirectory(dir); string fileNameList = Directory.GetFiles(dir); if (fileNameList.Length = 0) labelResult.Text = 没有文件; return; StringBuilder sb = new StringBuilder(); foreach (string fileName in fileNameList) sb.Append(fileName + rn); labelResult.Text = ; labelResult.Text = sb.ToString(); private void btnCreateFile_Click(object sender, EventAr

温馨提示

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

评论

0/150

提交评论