.Net魔法堂:史上最全的ActiveX开发教程——开发篇

上传人:太** 文档编号:60302722 上传时间:2022-11-15 格式:DOCX 页数:10 大小:367.19KB
返回 下载 相关 举报
.Net魔法堂:史上最全的ActiveX开发教程——开发篇_第1页
第1页 / 共10页
.Net魔法堂:史上最全的ActiveX开发教程——开发篇_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《.Net魔法堂:史上最全的ActiveX开发教程——开发篇》由会员分享,可在线阅读,更多相关《.Net魔法堂:史上最全的ActiveX开发教程——开发篇(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、一、刖百在设计某移动内部自动化运维平台时,经综合考虑终端机性能和功能需求等 因素后,决定采用B/S模式,并且浏览器通过ActiveX组件实现与服务器 Agent作P2P的通讯。好处,整个平台以网页形式存在,界面渲染性能高于桌 面应用(终端机性能其低);通过ActiveX组件与各服务器Agent进行P2P 通讯,不对Web服务器造成压力。风险,当用ActiveX传输上百兆的文件 时,会对浏览器造成哪些影响;团队中没有类似解决方案的经验供借鉴。解决 方法:前期对主要功能进行快速原型设计、开发、验证和总结。本系列将记录从开发、部署、更新、卸载到ActiveX与JS间的交互的.Net开 发Active

2、X全过程。由于之前学习如何使用.Net开发ActiveX时,查找了不少 文档,经过两天的东拼西凑后才掌握了整个开发过程,现在整理成系列以供日 后查阅。下面我们一起按部就班写ActiveX吧!二、写代码咯!开发环境:Win7、VS20101.创立类为 test.cab (或 test.exe ) , classic1为 clasid:xxxxxxxxxxxxxxxxxo 那么ActiveX控件的绝对路径就是(或 test.exe)/xxxxxxxxxxxxxxxo.NET Framework 2Q. .已安装的桎板/ Visual C# Windows Web Cloud Reporting S

3、ilverlight WCF Workflow wa其他顼目美型WHSWindows盍体应月程序ASP.NET Web 应用如Silverlight应用程序Silverlight 类H:名称(H):a(D:Visual CVisual C9Visual C#Visual CaVisual CsVisual C类型:Visual C用于创立C*美取dl)的工程2.设置工程属性2.1. 在应用程序页中,翻开程序集信息,勾选使程序集COM可见2.2.在生成页中,勾选为COM互操作注册在 Properties.AssemblyInfo.cs 文件中 添加 Iassembly:AllowPartiall

4、yTrustedCallers() (注意引入:System.Security命名空间)3 .添加用户控件ActiveX以用户控件为载体,加载到网页中.添加控件的GUIDActiveX的用户控件均有一个独立的GUID标识,该GUID必须与工程的GUID不同。3.1. 通过VS2010-工具-创立GUID3.2. 弓|入System.Runtime.InteropServices4.3.将生成的 GUID 粘贴 到用户控件类声明前Guid(“4D39585B-7947-4197-8BDB-B0A6918B1098)public partial class ATC : UserControlIni

5、tializeComponent ();)4 .开发 lObjectSafety 接口为了让ActiveX控件获得客户端的信任,用户控件必须实现lObjectSafety接口 ,并且下面的代码是固定的(GUID也不能变)Comlmport, Guid(CB5BDC81-93C1TlCF-8F20-00805F2CD064)InterfaceType(ComInterfaceType. InterfacelsUnknown)public interface lObjectSafety(PreserveSigint GetlnterfaceSafetyOpt ions(ref Guid ri id

6、, MarshalAs(CnmanagedType. U4) ref int pdwSupportedOptions, MarshalAs(UninanagedType. U4) ref int pdwhnab1edOp tions);PreserveSig ()int SetlnterfaceSafetyOptions(ref Guid riid, MarshalAs(CnmanagedType. U4) int dwOptionSetMask, MarshalAs(UnmanagedType. U4) int dwEnabledOptions);)5 .用户控件实现lObjectSafet

7、y接口GuidC4D39585B-7947-4197-8BDB-B0A6918B1098)public partial class ATC : UserControl, lObjectSafety(Ini t iali zeComponont();)region IObjectSafety 成员private const string _IID_IDispatch = 00020400-0000-0000-C000-000000000046private conststring _IID_IDispatchEx = a6ef9860-c720T1dO-9337-00a0c90dcaa9”;pr

8、ivate const stringIID_IPersistStorage = ?,0000010A-0000-0000-C000-000000000046)*;private const string _IID_IPersistStream =00000109-0000-0000-C000-000000000 046”;private const string IID IPersistPropertyBag = 37D84F60-42CBTICE-8135-00AA 004BB851”;private constint INTERFACESAFE_FOR_UNTRUSTED CALLER =

9、 0x00000001;private constint INTERFACESAFE FOR_UNTRUSTED_DATA = 0x00000002;private const int S OK = 0;private constint E_FAIL = unchecked(int)0x80004005);private constint E_NOINTERFACE = unchecked(int)0x80004002);private bool _fSafeForScripting = true;private bool fSafeForlnitializing = true;public

10、int GetlnterfaceSafetyOptions(ref Guid ri id, rof int pdwSupportedOption s, ref int pdwEneibledOptions)(int Rslt = EFAIL;string strGUID = ri id. ToString(,B,/);pdwSupportedOptions = INTERFACESAFE FOR INTRUSTED CALLER | INTERFACESAFE F0 R_UNTRUSTED_DATA;switch (strGUID)case _IID_IDispatch:case _IID_I

11、DispatchEx:Rslt = S_OK;pdwEnab1edOpt i ons = 0;if (_fSafeForScripting = true)pdwEnablcdOptions = INTERFACESAFE_rOR_UNTRUSTED_CALLER;break;case _IID_IPersistStorage:case IIDIPcrsistStrcam:case IID IPersistPropertyBag:Rslt = SJ)K;pdwEnabIcdOpt ions = 0;if CfSafeForlnitializing = true)pdwEnab1edOptions

12、 = INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt = E_NOINTERFACE;break;)return Rslt;)public int SetlnterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int d wEnabledOptions)(int Rslt = E_FAIL;string strGUID = riid. ToString(B);switch (strGUID)case _IID_IDispatch:case IIDIDispatchEx:if (

13、dwEnabledOptions & dwOptionSetMask) = INTERFACESAFE FOR UNTR USTED_CALLER) &(fSafeForScripting = true)Rslt = S_OK;break;case _IID_IPersistStorage:case _IID_IPersistStream:case IIDIPersistPropcrtyBag:if (dwEnabledOptions & dwOptionSetMask) = INTERFACESAFE FOR UNTR USTED_DATA) &(fSafeForlnitializing =

14、 true)Rslt = S_OK;break;default:Rslt = E_NOINTERFACE;break;return Rslt;)ttendregion.获取 ActiveX 的 Classid5.1. 翻开VS2010-工具-OleView(假设没有就自行添加,程序路径:C:Program FilesMicrosoft SDKsWindowsv7.0AbinOleView.exe)o在Object Classes-Grouped by Component Category-.NETCategory找到刚才新建的ActiveX控件7.3.右键复制HTML标签6 .页面引用ActiveX控件在html页面上6.1. classid :用于指定要加载的ActiveX的clsid , clasid就是用户控件的GUID值;8.2. codebase :用于指定clasid的基本URL ,可为绝对或相对路径,因ActiveX控件被打包到安装包中,所以codebase必须为安装包的路径。8.3. 实例:页面 URL 为 , codebase

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁