




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、潘爱民2003-12-5http:/ controllCOM+lOLE嵌入对象技术嵌入对象技术l实地激活实地激活(in-place activation)l属性页属性页(Property Page)l属性变化通知属性变化通知l实地激活是指实地激活是指OLE对象的一种界面特性,具有对象的一种界面特性,具有实地激活特性的对象可以直接在包容器窗口内实地激活特性的对象可以直接在包容器窗口内部进行编辑部进行编辑 也被称作实地编辑也被称作实地编辑(in-place editing)或可视编辑或可视编辑(visual editing)框架对象文档窗口对象站点对象IUnknownIOleInPlaceFram
2、eIOleInPlaceUIWindowIOleClientSiteIAdviseSinkIOleInPlaceSite实地激活对象激活对象IUnknownIOleInPlaceObjectIOleInPlaceActiveObject嵌入对象的其它接口l界面处理界面处理 菜单合并、工具条、快捷键菜单合并、工具条、快捷键l消息发送、焦点控制消息发送、焦点控制 鼠标消息、键盘消息鼠标消息、键盘消息l窗口大小和位置调整窗口大小和位置调整lActiveX Control可以有所简化可以有所简化l例子例子客户属性表(属性框架)有模式对话框页站点页站点页站点属性页属性页属性页对象对象OleCreateP
3、ropertyFrameIPropertyPageSiteIPropertyPageISpecifyPropertyPagesIUnknownlCOM对象如果要支持属性页特性,那么对象如果要支持属性页特性,那么它必须实现它必须实现ISpecifyPropertyPages接接口口class ISpecifyPropertyPages : IUnknown HRESULT GetPages(CAUUID *pPages) = 0;lOleCreatePropertyFrameSTDAPI OleCreatePropertyFrame(HWND hWndOwner, UINT x, UINT y,
4、LPCOLESTR lpszCaption, ULONG cObjects, IUnknown *lplpUnk,ULONG cPages, CLSID *lpPages, LCID lcid, DWORD dwReserved, LPVOID pvReserved);class IPropertyPageSite : public IUnknown HRESULT OnStatusChange(DWORD flags) = 0; HRESULT GetLocaleID(LCID *pLocaleID) = 0; HRESULT GetPageContainer(IUnknown *ppUnk
5、) = 0; HRESULT TranslateAccelerator(LPMSG pMsg) = 0;l使用了可连接对象机制,出接口为使用了可连接对象机制,出接口为class IPropertyNotifySink : public IUnknown HRESULT OnChanged(DISPID dispid) = 0; HRESULT OnRequestEdit(DISPID dispid) = 0; 功能要求 使用的技术 属性和方法管理 自动化 属性变化通知(包括可连接对象机制) 事件管理 自动化 可连接对象(以 IDispatch 作为出接口) 用户界面特性(可视性) 实地激活、O
6、LE 嵌入对象 可视对象(实现了接口 IViewObject2) 统一数据传输 状态永久性机制 结构化存储 永久对象 ActiveX 控制ISpecifyPropertyPagesIOleObjectIOleInPlaceObjectIOleInPlaceActiveObjectIDataObjectIViewObject2IPersistXXXIRunnableObjectIConnectionPointContainerIDispatchIProvideClassInfoIOleControl类厂对象IClassFactory或 IClassFactory2类型库功能要求使用的技术布局特性
7、OLE 复合文档OLE 拖-放机制永久特性结构化存储永久对象包容器环境属性自动化控制站点对象事件机制自动化可连接对象包容器扩展控制包容和聚合两种重用模型键盘功能IOleControl 和 IOleControlSite 接口框架对象文档窗口对象IUnknownIOleInPlaceFrameIOleInPlaceUIWindowIOleClientSiteIOleInPlaceSiteIAdviseSinkIOleControlSiteIDispatch (暴露环境属性)IPropertyNotifySink控制站点对象事件接收器IDispatch (出接口,响应事件)l键盘功能、快捷键的处理
8、、焦点控制键盘功能、快捷键的处理、焦点控制l扩展控制功能扩展控制功能l环境属性环境属性l属性页属性页l事件控制事件控制lActiveX控制的标准属性控制的标准属性lActiveX控制的标准方法控制的标准方法lActiveX控制的标准事件控制的标准事件l包容器的标准环境属性包容器的标准环境属性l从桌面环境转向从桌面环境转向Internetl包装包装ActiveX控制控制l许可证管理许可证管理lWeb页面中页面中ActiveX控制的初始化控制的初始化l脚本支持与初始化安全性脚本支持与初始化安全性l网络传输网络传输l安全性安全性l包容器如何管理、发布包容器如何管理、发布接口功能与说明IOleObje
9、ct如果控制要与包容器程序的站点对象进行通讯,那么必须实现此接口。IOleInPlaceObjectIOleInPlaceActiveObject如果控制支持实地激活特性,那么必须实现此接口。IOleControl如果控制支持快捷键,或者访问包容器的环境属性,或者控制要求包容器处理事件,那么必须实现此接口。IDataObject如果控制提供数据对象的特性,那么必须实现此接口。IViewObject2如果控制在非实地激活的状态下也需要显示信息的话,那么必须实现此接口。IDispatch如果控制有自定义的属性和方法的话,那么必须实现此接口。IConnectionPointContainer如果控制
10、对象支持一个或多个出接口,那么必须实现此接口。IProvideClassInfo2如果控制对象要直接通过 GetClassInfo 成员函数提供对象类型信息的话,那么必须实现此接口。ISpecifyPropertyPages如果控制对象支持属性页特性的话,那么必须实现此接口。IPersistStreamInitIPersistStorage或其它永久接口如果控制对象支持永久特性的话,那么至少实现一个永久接口。ATL 3.0 test page for object PolyCtll客户客户-服务器协调控制服务器协调控制l例子一:例子一: lIE自动下载到自动下载到“Downloaded Pro
11、gram Files”目录中并注册到客户机上目录中并注册到客户机上l例子二:例子二: lCAB文件,压缩代码提高传输效率文件,压缩代码提高传输效率lCAB文件可包含多个代码文件文件可包含多个代码文件lIE在解析在解析“OBJECT”标记时,它继续查找标记时,它继续查找codebase属性属性l如果如果codebase指定了指定了ActiveX控制的控制的CAB文文件,那么件,那么IE定位到定位到CAB文件文件lIE把把CAB文件中的有关文件解压出来,并放到文件中的有关文件解压出来,并放到 “Downloaded Program Files”子目录中子目录中lIE注册有关的文件注册有关的文件lI
12、E调用调用COM API函数创建函数创建ActiveX控制对象控制对象l包含了包含了ActiveX控制注册和运行所需要的必要控制注册和运行所需要的必要信息信息lCAB文件包含一个文件包含一个INF文件,文件,lINF文件是一个文本文件,它描述了文件是一个文本文件,它描述了CAB文件文件的所有细节信息的所有细节信息lCAB文件的制作文件的制作 cabarc.exe N polygon.cab atl.dll polygon.dll polygon.inf 支持数字签名支持数字签名version signature=$CHICAGO$ AdvancedINF=2.0Add.Code polygon
13、.dll=polygon.dll atl.dll=atl.dllatl.dll file-win32-x86=thiscab FileVersion=3,00,0,8166 DestDir=11 RegisterServer=yespolygon.dll file-win32-x86=thiscab clsid=2885EE05-A26B-11D1-B49B-00C04F98EFE0 FileVersion=1,0,0,1 RegisterServer=yesl设计时刻的许可证检查由设计时刻的许可证检查由ActiveX控制的控制的包容器程序完成包容器程序完成l在运行时刻,不同的包容器程序对在运
14、行时刻,不同的包容器程序对ActiveX控制的许可证检查方法有所不同。控制的许可证检查方法有所不同。以以VB为例为例 : (1)创建应用程序时刻)创建应用程序时刻(build) (2)在运行应用程序时刻)在运行应用程序时刻lIE的处理有所不同的处理有所不同lIE包含一个许可证管理器组件包含一个许可证管理器组件lMicrosoft引进了许可证包文件引进了许可证包文件(license package file,后缀为,后缀为LPK)lIE的许可证管理器组件负责解析的许可证管理器组件负责解析LPK文文件,并提取出每个件,并提取出每个CLSID的许可证的许可证l然后调用然后调用IClassFactor
15、y2:CreateInstanceLic函函数创建数创建ActiveX控制对象控制对象l例子例子 lIE初始化过程:初始化过程:(1)IE创建创建URL名字对象名字对象(2)然后调用)然后调用ActiveX控制的控制的IPersistMoniker接口的接口的Load成员函数执成员函数执行初始化行初始化(3)ActiveX控制调用名字对象的控制调用名字对象的IMoniker:BindToStorage函数获取函数获取属性数据属性数据l例子例子 lIE初始化过程:初始化过程:(1)IE把把“PARAM”属性对生成一个属性包属性对生成一个属性包(property bag)对象对象(2)然后调用)然
16、后调用ActiveX控制的控制的IPersistPropertyBag接接口的口的Load成员函数执行初始化成员函数执行初始化class IObjectSafety : public IUnknownpublic: virtual HRESULT GetInterfaceSafetyOptions( REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions) = 0; virtual HRESULT SetInterfaceSafetyOptions( REFIID riid, DWORD dwOptionSetMask
17、, DWORD dwEnabledOptions) = 0;l安全性包括初始化安全性和脚本安全性安全性包括初始化安全性和脚本安全性l也可以通过注册表项的也可以通过注册表项的“组件类别组件类别”设置安全设置安全性性lVC集成环境的支持:集成环境的支持: AppWizard和和ClassWizard、 ActiveX Control Test ContainnerlMFCCOleControl类类 用用MFC实现实现ActiveX控制控制 用用MFC实现实现ActiveX控制包容器控制包容器lATLlVBl程序类型不同程序类型不同l界面方式不同界面方式不同lHTML文件中的使用方式不同文件中的使用
18、方式不同l数据保存方式不同数据保存方式不同l服务程序转载方式不同服务程序转载方式不同lCOM回顾回顾lCOM+介绍介绍lCOM+结构结构lCOM+服务服务lCOM+开发开发COM基础Typelib结构化存储可连接对象Automation永久对象UDTmoniker属性页事件属性变化通知ActiveX ControlOLE嵌入对象In-place activateCOM桌面应用DCOM C/S应用COM+ Services分布式应用/企业应用l从桌面应用发展到企业应用、从桌面应用发展到企业应用、Web应用应用 企业应用特点:企业应用特点: 大型、分布式、实现企业的关键业务大型、分布式、实现企业的
19、关键业务l企业应用的挑战企业应用的挑战 关键业务:业务逻辑关键业务:业务逻辑 基础设施:涉及到系统方方面面基础设施:涉及到系统方方面面 开发、调试、测试、配置、维护开发、调试、测试、配置、维护 如如transaction、security、event等等l面向企业应用面向企业应用 提供了企业应用所需要的通用基础设施提供了企业应用所需要的通用基础设施 设计企业应用要求有思想上的根本变化设计企业应用要求有思想上的根本变化lCOM+对对COM的增强和改进的增强和改进 增强了增强了COM runtime library 增强了增强了MTS(Microsoft Transaction Server) 事
20、务服务、安全服务事务服务、安全服务 提供了新的提供了新的runtime服务服务 队列服务、事件服务、负载平衡、队列服务、事件服务、负载平衡、(内存数据库内存数据库)lCOM+兼容兼容COM,只是提供了更多的功能,只是提供了更多的功能l使程序员和用户把注意力和精力集中在业务逻使程序员和用户把注意力和精力集中在业务逻辑上,而不是基础设施上辑上,而不是基础设施上l使组件尽可能地通用使组件尽可能地通用 编译时刻特性与运行时刻特性分离编译时刻特性与运行时刻特性分离l与以前的与以前的COM组件兼容组件兼容l客户和组件的透明性客户和组件的透明性COM对象机器、进程或者套间边界ProxyRPC通道StubCl
21、ient Policy 1Client Policy 2Server Policy 2Server Policy 1lCOM+组件结构组件结构 COM+ Application 管理基本单元管理基本单元 COM+ Components 功能基本单元功能基本单元COM+ ObjectslCOM+ Application 分为两类:分为两类: Server Application,DllHost.exe Library Application,与客户共享进程,仍然截取,与客户共享进程,仍然截取 共享同一个进程,同一组属性设置共享同一个进程,同一组属性设置lCOM+ Components为为COM进
22、程内组件进程内组件lCOM+ Objects为为COM进程内对象进程内对象lComponent Services snap-inl对客户透明,使用增强了的对客户透明,使用增强了的COM库库l客户创建客户创建COM对象对象 COM+ runtime services会检查会检查COM+的配置信息的配置信息 启动指定的服务进程启动指定的服务进程 安装安装interceptor,截取器,截取器 在客户方创建代理对象,并返回给客户在客户方创建代理对象,并返回给客户lCOM+根据指定的应用属性管理服务进程的生根据指定的应用属性管理服务进程的生命周期命周期l要求要求DLL形式的组件形式的组件l要求自注册要
23、求自注册 DllRegisterServer、DllUnregisterServerl要求有要求有typelib typelib既可以绑在既可以绑在dll上,也可以单独的文上,也可以单独的文件件lCOM+管理信息、系统数据库管理信息、系统数据库 COM+ Registration Database l通过一个对象层次结构管理通过一个对象层次结构管理COM+ Catalog COM+ Administration Library,支持脚本,支持脚本l组件服务组件服务snap-in管理工具就是该对象模型的管理工具就是该对象模型的一个功能缩影一个功能缩影l用户可以通过用户可以通过COMAdminCa
24、talog组件进入到组件进入到对象模型中对象模型中 ProgID:COMAdmin.COMAdminCatalogDim Catalog As new COMAdminCatalog Dim Applications As COMAdminCatalogCollection Dim Components As COMAdminCatalogCollection Dim AppObject As COMAdminCatalogObject get the Applications collection and populate itSet Applications = Catalog.GetCo
25、llection(Applications) Applications.Populate get the correct application, My ApplicationFor Each AppObject in Applicationss If AppObject.Name = My Application Then Exit For Next get the Components collection for My ApplicationSet Components = Applications.GetCollection( Components , AppObject.Key )
26、l对象所生存的对象所生存的COM+状态状态 COM激活对象时,创建激活对象时,创建context 对象的环境与对象紧紧绑在一起对象的环境与对象紧紧绑在一起 根据组件的属性根据组件的属性(attribute)决定环境的状态决定环境的状态 环境属性也是对象与客户之间的约定环境属性也是对象与客户之间的约定l如何访问如何访问“环境对象环境对象” CoGetObjectContext GetObjectContextl环境对象支持接口环境对象支持接口 IObjectContext IGetContextProperties IObjectContextInfo IContextState ISecuri
27、tyCallContextl环境可以扩充环境可以扩充 比如比如ASP对象对象l安全性基础设施对于分布式应用至关重要安全性基础设施对于分布式应用至关重要lAuthentication 认证认证(鉴定鉴定) Authentication Level SSP/SSPI 允许扩展允许扩展 NTLM/Kerberos CoInitializeSecurity 安全与性能的平衡安全与性能的平衡l授权授权(Authorization)lRole-based 仅限于通过截取器的调用仅限于通过截取器的调用l通过程序来控制通过程序来控制ISecurityCallContext和和IObjectControl提供了
28、提供了 IsSecurityEnabled IsCallerInRolel进一步有进一步有ISecurityPropertyl服务进程的身份服务进程的身份(identity) DCOM方案:登录到客户机上的用户方案:登录到客户机上的用户 不再有效不再有效 当前交互用户或者每个指定的用户当前交互用户或者每个指定的用户l三层结构的两种三层结构的两种安全模型安全模型 trusted server model impersonation/dele-gation modelSTASTAMTA进程lTNA(Thread neutral apartment) 不包含线程,只有对象,所有的对象与线程无关不包含
29、线程,只有对象,所有的对象与线程无关lTNA中的对象中的对象 ThreadingModel=Neutral 创建线程总是接收到一个轻量级的代理创建线程总是接收到一个轻量级的代理 调用时,直接在调用线程中执行调用时,直接在调用线程中执行lTNA有希望替代有希望替代“Free”和和“Both”类型类型lSTA继续生存,特别是包含继续生存,特别是包含UI的对象的对象l或者或者serialization STA对象不需要同步,对象不需要同步,MTA、TNA对象需要同步对象需要同步lCOM+提供了提供了“activity-based synchronization” activity:代表单个客户:代表
30、单个客户执行任务的一组对象执行任务的一组对象 相当于一个逻辑线程相当于一个逻辑线程 每个每个activity都包含一都包含一个进程范围内的锁个进程范围内的锁 可以处理跨越机器可以处理跨越机器边界的嵌套调用边界的嵌套调用l分布式应用最困难的一个基础设施分布式应用最困难的一个基础设施l定义:由一组相互关联的操作构成的整体行为定义:由一组相互关联的操作构成的整体行为l难点所在:保持系统状态一致性难点所在:保持系统状态一致性 在操作过程中,发生意外或者失败在操作过程中,发生意外或者失败 操作的中间状态要被隔离开操作的中间状态要被隔离开 组件设计思想:把大的操作分解开,并可能包装到组件设计思想:把大的操
31、作分解开,并可能包装到小的组件中。这加剧了事务的困难,因为:小的组件中。这加剧了事务的困难,因为:在编写组件时需要处理由其他组件引起的所有问题在编写组件时需要处理由其他组件引起的所有问题lDTC(Distributed Transaction Coordinator) 每个组件对每个组件对DTC负责,负责,DTC知道所有的组件知道所有的组件l两阶段提交两阶段提交 准备和提交准备和提交 对象表态:对象表态:committing、abortinglCOM+ runtime提供了免费的提供了免费的DTCl组件与组件与DTC的通讯的通讯 IObjectContext:SetComplete IObje
32、ctContext:SetAbortComplete 组件的属性设置组件的属性设置环境 MoveMoney对象T1(事务根对象)(1) 基客户调用MoveMoney对象的Perform方法环境 AccountA对象T1(用户账户)(2) MoveMoney创建AccountA对象环境 AccountB对象T1 (电话公司账户)(3) MoveMoney创建AccountB对象环境 MoveMoney对象T1(事务根对象)(1) 调用Post环境 AccountA对象T1(用户账户)环境 AccountB对象T1 (电话公司账户)SQL ServerCOM+ RMDTC服务(2) Account
33、对象通过ADO连接到SQL Server(3) SQL Server加入到事务到T1中(4) Account对象执行SQL Server调用SQL Server缓冲区 账户 数目 事务ID用户账户 ¥-100 T1电话公司账户 ¥+100 T1(5) SQL Server把变化缓存起来lCOM+ RM(Resource Manager) 知道当参与事务的对象改变它的状态时,该如何把资知道当参与事务的对象改变它的状态时,该如何把资源的变化缓存起来源的变化缓存起来 如果事务被提交,如果事务被提交,RM知道如何改变资源状态知道如何改变资源状态 如果事务被放弃了,如果事务被放弃了,RM知道如何把变化丢
34、掉知道如何把变化丢掉 例如:各种数据库系统、例如:各种数据库系统、MSMQlDTC两阶段提交过程两阶段提交过程 对象不参与提交过程,只是表态对象不参与提交过程,只是表态 准备阶段:准备阶段:RM把状态信息保存起来,保证不会失败把状态信息保存起来,保证不会失败 提交阶段:提交阶段:DTC通过通过RM提交事务提交事务lAtomicity 要么所有的变化都有效,要么都无效要么所有的变化都有效,要么都无效lConsistency 状态一致性状态一致性lIsolation 事务外部看不到事务的中间结果事务外部看不到事务的中间结果lDurability 缓存的中间结果要能缓存的中间结果要能“持久持久”uu
35、id(04CF0B76-1989-11D0-B917-0080C7394688),helpstring(Account Class),TRANSACTION_REQUIREDcoclass CAccountdefault interface IAccount;uuid(04CF0B7B-1989-11D0-B917-0080C7394688),helpstring(MoveMoney Class),TRANSACTION_REQUIREDcoclass CMoveMoneydefault interface IMoveMoney;l不支持不支持l支持支持l需要需要l需要新建需要新建l禁用禁用l
36、两个控制位两个控制位 transaction-vote bit:表态位:表态位 deactivate-on-return bit:返回之后,对象:返回之后,对象即无效即无效l通过环境对象控制这两位通过环境对象控制这两位 IObjectContext IContextStatel事务组件必须使用事务组件必须使用JIT activation特性特性基客户代理RPC通道存根T1对象基客户代理RPC通道存根(无事务)基客户代理RPC通道存根T2新的对象l资源利用资源利用 可伸缩性可伸缩性 系统帮助回收资源系统帮助回收资源 回收的价值:部分回收所占整体的比例,以回收的价值:部分回收所占整体的比例,以及资
37、源本身的重要性及资源本身的重要性(比如数据库连接比如数据库连接)l保证事务的正确性保证事务的正确性 一致性和隔离性一致性和隔离性l与对象池的结合与对象池的结合l状态管理新概念状态管理新概念l池组件池组件l对象必须实现对象必须实现IObjectControl接口接口 Activate Deactivate CanBePooledl池组件满足以下条件:池组件满足以下条件: 线程模型不能为线程模型不能为STA 可被聚合可被聚合 不能聚合其他的池组件不能聚合其他的池组件l在分布式系统中,在分布式系统中, 同步、异步并存同步、异步并存 企业活动中,电话、电子邮件、电话留言企业活动中,电话、电子邮件、电话
38、留言l通讯双方在时间点上的分离通讯双方在时间点上的分离 例如:在例如:在off-line下写下写email,然后放到,然后放到outbox中,一旦中,一旦on-line,邮件就被发送出去,邮件就被发送出去 资源分配更为合理资源分配更为合理(通过设置优先级别通过设置优先级别),从而提高资源利用率,从而提高资源利用率和可伸缩能力和可伸缩能力 不必要求所有的应用系统都在同一个时刻运行,从而简化分不必要求所有的应用系统都在同一个时刻运行,从而简化分布式应用的开发布式应用的开发l队列组件队列组件 COM+为这种通讯方式提供了一套基础设施为这种通讯方式提供了一套基础设施基客户QC.Recorder异步MS
39、MQQC.Player对象l对于组件透明对于组件透明 同样的组件既可以与同样的组件既可以与Queue结合,也可以不结合,也可以不结合结合 对于客户不完全透明对于客户不完全透明l避免了避免了MSMQ编程的复杂性编程的复杂性 编写编写QC无需任何编写无需任何编写MQ的经验的经验 缺点:缺少控制能力缺点:缺少控制能力Dim Ship As ObjectSet Ship = GetObject(queue:/new:VBShipProj.VBShip)Ship.CustomerID = 1111Ship.OrderID = 2222Ship.LineItem 12, Drummers drumming
40、Ship.LineItem 11, Pipers pipingShip.LineItem 10, Lords a leapingShip.LineItem 9, Ladies dancingShip.LineItem 8, Maids a milkingShip.LineItem 7, Swans a swimmingShip.LineItem 6, Geese a layingShip.LineItem 5, Gold ringsShip.LineItem 4, Calling birdsShip.LineItem 3, French hensShip.LineItem 2, Turtled
41、ovesShip.LineItem 1, A partridge in a pear treeShip.Processl接口设计接口设计 禁止使用禁止使用out、in,out、retval 必须使用按值传递参数方式必须使用按值传递参数方式 客户对一系列组件方法的调用必须能够满足自己功能的需要,客户对一系列组件方法的调用必须能够满足自己功能的需要,例如,不能使用枚举器对象例如,不能使用枚举器对象 不能返回与应用相关的错误码,返回值只表示不能返回与应用相关的错误码,返回值只表示QC.Recorder是否记录成功。是否记录成功。l如何接收输出如何接收输出 没有输出没有输出 对某些调用要求有应答对某些
42、调用要求有应答 用同样的异步机制用同样的异步机制QC 传递一个也具有传递一个也具有QC特性的回调对象特性的回调对象 在设计软件的时候应该尽量避免输出的必要性在设计软件的时候应该尽量避免输出的必要性lQC与事务的结合与事务的结合 MSMQ本身就是一个本身就是一个RM 在客户端在客户端QC与事务的结合与事务的结合 在服务器端在服务器端QC与事务的结合与事务的结合lQC的安全性的安全性 与同步方式的认证过程不同与同步方式的认证过程不同 每个消息包含数字签名每个消息包含数字签名l使用使用Moniker创建创建QC对象,例如对象,例如 GetObject(“queue:/new:VBShipProj.V
43、BShip“) 封装了组件的创建过程,使组件对于两种方式透明封装了组件的创建过程,使组件对于两种方式透明lqueue名字对象名字对象 GetObject(“queue:ComputerName=SomeMachine/new:VBShipProj.VBShip“)lnew名字对象名字对象 GetObject(“new:VBShipProj.VBShip“)l事件模型中用到的两个概念事件模型中用到的两个概念 publisher:发布者:发布者 subscriber:订阅者:订阅者l变化通知变化通知 轮循法轮循法 可连接对象可连接对象 tightly coupled event COM+的方案:的
44、方案:loosely coupled event modelCOM+目录事件类订阅信息表Publisher1 注册Subscriber2 注册事件对象IFoo e1()e2().3 创建4 激发5 读入subscriber列表IFoo e1()e2().6 把事件递交到每个subscriber7 接收事件 Create the event class objectDim foo As New StockEventCls Call the event class objects method that fires the StockPriceChanged event.Private Sub C
45、ommand1_Click() Call foo.StockPriceChanged(Text1.Text, CCur(Text2.Text)End Sub Call the event class objects method that fires the NewStockListed event.Private Sub Command2_Click() Call foo.NewStockListed(Text1.Text)End Sub The subscriber must implement the interface on which it wants to receive call
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆政法学院《中国传统文化经典著作选读》2023-2024学年第二学期期末试卷
- 淮北师范大学《细胞生物学专题》2023-2024学年第二学期期末试卷
- 惠州卫生职业技术学院《食品工程制图》2023-2024学年第二学期期末试卷
- 山西省吕梁市交城县2025届数学三下期末检测试题含解析
- 石家庄工程职业学院《管理系统工程》2023-2024学年第二学期期末试卷
- 江苏省苏州市常熟市2024-2025学年六年级下学期小升初数学考前押题卷含解析
- 上海大学市北附属中学2025年高考信息卷语文试题含解析
- 黑龙江省牡丹江管理局北斗星协会达标名校2025届下学期初三语文试题第一次质量检测试题考试试卷含解析
- 山东省枣庄八中东校2024-2025学年高三第二次质量监测物理试题含解析
- 永善县2025届三下数学期末经典模拟试题含解析
- 【精选】人教版四年级下册数学《脱式计算》(含简便运算)专项练习题
- 血液透析操作流程(共5篇)
- 脊柱常见病变的影像诊断
- 纪录片赏析完整版
- GB/T 30103.1-2013冷库热工性能试验方法第1部分:温度和湿度检测
- GB/T 21385-2008金属密封球阀
- GB/T 211-2017煤中全水分的测定方法
- (红皮书)水利水电工程施工质量评定表
- 工序标准工时及产能计算表
- 处分通报范文员工处分通报范文4篇
- 汽车品牌马自达课件
评论
0/150
提交评论