(模式识别与智能系统专业论文)opc数据访问客户端开发库的研究与实现.pdf_第1页
(模式识别与智能系统专业论文)opc数据访问客户端开发库的研究与实现.pdf_第2页
(模式识别与智能系统专业论文)opc数据访问客户端开发库的研究与实现.pdf_第3页
(模式识别与智能系统专业论文)opc数据访问客户端开发库的研究与实现.pdf_第4页
(模式识别与智能系统专业论文)opc数据访问客户端开发库的研究与实现.pdf_第5页
已阅读5页,还剩93页未读 继续免费阅读

(模式识别与智能系统专业论文)opc数据访问客户端开发库的研究与实现.pdf.pdf 免费下载

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

文档简介

华北电力大学( 北京) 硕士学位论文 摘要 o p c ( o l e f o r p r o c e s s c o n t r o l ) 是过程 控制t 业中 的新兴 标 准, 基于m i c r o s o f t 的 c o m / d c o m 技术,它包括一整套用于过程控制自 动化接口和方法的标准集。本文 要解决 的 任 务 就 是 如 何 开 发o p c 客 户 端 应 用 程 序, 论 文 介 绍了6 p c 技 术产生的 背 景,以及它的主要特点与发展状况,并深入剖析了其核心c o m / d c o m技术。然后 重点分析了o p c数据访问规范及o p c客户端与服务器的通信机制。接着介绍了如 何开发以动态链接库形式封装的客户端快速开发工具,这是本论文的核心。最后介 绍了对 o p c客户端开发库的测试,及使用该库完成一个完整的 o p c客户端应用程 序。经测试,该o p c客户端开发库具有良好的灵活性和封装性,与o p c服务器能 够很好进行协调, 提供了完善的错误处理机制, 使客户开发的o p c客户应用程序更 加安全可靠。 关键词:o p c ; o p c客户端:o p c d a ; o p c 开发工具;d l l abs t ract t h e m i s s i o n t h a t t h i s a r t i c l e w a n t t o s o l v e i s h o w t o d e v e l o p t h e o p c r a p i d c l i e n t d e v e l o p m e n t l i b r a r y . f i r s t t h e a r t i c l e i n t r o d u c e s t h e p r o d u c i n g b a c k g r o u n d , ma i n c h a r a c t e r i s t i c s a n d d e v e l o p m e n t c o n d i t i o n o f o p c t e c h n i q u e , t h e n a n a l y z e s i t s c o r e c o m / d c o m t e c h n i q u e . i n o r d e r t o d e c r e a s e t h e d i f f i c u l t y o f o p c c l i e n t s d e v e l o p m e n t , a n d a l s o t o o b t a i n m o r e f u n c t i o n s , i t s n e c e s s a r y t o r e a l i z e a c u r r e n t o p c r a p i d d e v e l o p m e n t l i b r a r y .t h i s p a p e r e x p l a i n s h o w t o c r e a t e a f r a m e t o d e v e l o p t h e l i b r a r y , a n d i n t r o d u c e s h o w t o d e v e l o p a o p c c l i e n t a p p l i c a t i o n w i t h t h e r a p i d c l i e n t d e v e l o p m e n t l i b r a r y ( d l l ) , a n d d e s c r i b e s h o w t o u s e t h e f u n c t i o n s t h a t t h e d l l e x p o r t s t o c o n n e c t a o p c s e r v e r , t o b r o w s e d a t a i n o p c s e r v e r , t o c r e a t e a g r o u p o b j e c t a n d a i t e m o b j e c t i n d e t a i l . i t s m e n t i o n e d t h a t u s i n g t h e c a l l b a c k f u n c t i o n s t o r e a d , w r i t e a n d s u b s c r i b e t h e d a t a i n o p c s e r v e r . f i n a l l y i t s n e c e s s a r y t o t e s t t h e r a p i d c l i e n t d e v e l o p m e n t l i b r a r y b y w r i t i n g a c l i e n t a p p l i c a t i o n , a n d t h e r e s u l t o f t h e t e s t i n d i c a t e s t h a t t h e d e v e l o p m e n t l i b r a r y h a s g o o d fl e x i b i l i t y a n d s e c u r i t y f o r o p c c l i e n t . l i p e n g c o n t r o l t h e o r y a n d e n g i n e e r i n 助 d i r e c t e d b y a s s o c i a t e p r o f . l u h u i m i n g k e y w o r d s : o p c; o p c c l i e n t ; o p c c l i e n t ; o p c d e v e l o p m e n t t o o l s ; d l l 华北电力大学( 北京) 硕士学位论文 摘要 o p c ( o l e f o r p r o c e s s c o n t r o l ) 是过程 控制t 业中 的新兴 标 准, 基于m i c r o s o f t 的 c o m / d c o m 技术,它包括一整套用于过程控制自 动化接口和方法的标准集。本文 要解决 的 任 务 就 是 如 何 开 发o p c 客 户 端 应 用 程 序, 论 文 介 绍了6 p c 技 术产生的 背 景,以及它的主要特点与发展状况,并深入剖析了其核心c o m / d c o m技术。然后 重点分析了o p c数据访问规范及o p c客户端与服务器的通信机制。接着介绍了如 何开发以动态链接库形式封装的客户端快速开发工具,这是本论文的核心。最后介 绍了对 o p c客户端开发库的测试,及使用该库完成一个完整的 o p c客户端应用程 序。经测试,该o p c客户端开发库具有良好的灵活性和封装性,与o p c服务器能 够很好进行协调, 提供了完善的错误处理机制, 使客户开发的o p c客户应用程序更 加安全可靠。 关键词:o p c ; o p c客户端:o p c d a ; o p c 开发工具;d l l abs t ract t h e m i s s i o n t h a t t h i s a r t i c l e w a n t t o s o l v e i s h o w t o d e v e l o p t h e o p c r a p i d c l i e n t d e v e l o p m e n t l i b r a r y . f i r s t t h e a r t i c l e i n t r o d u c e s t h e p r o d u c i n g b a c k g r o u n d , ma i n c h a r a c t e r i s t i c s a n d d e v e l o p m e n t c o n d i t i o n o f o p c t e c h n i q u e , t h e n a n a l y z e s i t s c o r e c o m / d c o m t e c h n i q u e . i n o r d e r t o d e c r e a s e t h e d i f f i c u l t y o f o p c c l i e n t s d e v e l o p m e n t , a n d a l s o t o o b t a i n m o r e f u n c t i o n s , i t s n e c e s s a r y t o r e a l i z e a c u r r e n t o p c r a p i d d e v e l o p m e n t l i b r a r y .t h i s p a p e r e x p l a i n s h o w t o c r e a t e a f r a m e t o d e v e l o p t h e l i b r a r y , a n d i n t r o d u c e s h o w t o d e v e l o p a o p c c l i e n t a p p l i c a t i o n w i t h t h e r a p i d c l i e n t d e v e l o p m e n t l i b r a r y ( d l l ) , a n d d e s c r i b e s h o w t o u s e t h e f u n c t i o n s t h a t t h e d l l e x p o r t s t o c o n n e c t a o p c s e r v e r , t o b r o w s e d a t a i n o p c s e r v e r , t o c r e a t e a g r o u p o b j e c t a n d a i t e m o b j e c t i n d e t a i l . i t s m e n t i o n e d t h a t u s i n g t h e c a l l b a c k f u n c t i o n s t o r e a d , w r i t e a n d s u b s c r i b e t h e d a t a i n o p c s e r v e r . f i n a l l y i t s n e c e s s a r y t o t e s t t h e r a p i d c l i e n t d e v e l o p m e n t l i b r a r y b y w r i t i n g a c l i e n t a p p l i c a t i o n , a n d t h e r e s u l t o f t h e t e s t i n d i c a t e s t h a t t h e d e v e l o p m e n t l i b r a r y h a s g o o d fl e x i b i l i t y a n d s e c u r i t y f o r o p c c l i e n t . l i p e n g c o n t r o l t h e o r y a n d e n g i n e e r i n 助 d i r e c t e d b y a s s o c i a t e p r o f . l u h u i m i n g k e y w o r d s : o p c; o p c c l i e n t ; o p c c l i e n t ; o p c d e v e l o p m e n t t o o l s ; d l l y7 1 2 9 9 4 匕 o口 尸a明 本人郑重声明: 此处所提交的硕士学位论文 o p c数据访问客户端开发库 的研究与实现 , 是本人在华北电力大学攻读硕士学位期间, 在导师指导下进行 的研究工作和取得的研究成果。 据本人所知, 除了文中特别加以标注和致谢之处 外, 论文中不包含其他人已经发表或撰写过的研究成果, 也不包含为获得华北电 力大学或其他教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本 研究所做的 任何贡献均己 在论文中作了明确的说明并表示了谢意。 学位论文作者签名:日期: 关于学位论文使用授权的说明 本人完全了解华北电力大学有关保留、 使用学位论文的规定, 即: 学校有 权保管、 并向 有关部门 送交学位论文的原件与复印件; 学校可以 采用影印、 缩 印或其它复制手段复制并保存学位论文;学校可允许学位论文被查阅或借阅: 学校可以学术交流为目 的, 复制赠送和交换学位论文;同意学校可以用不同 方式在不同媒体上发表、传播学位论文的全部或部分内容。 ( 涉密的学位论文在解密后遵守此规定) 作者签名: 导师签名: 日期: 日期: 华 北电力大 学( 北京姆 卜 学位论.文 第一章 引言 1 . 1 o p c技术概述 随着计算机、微电子、通信和网络技术的发展,工业控制领域也发生着深刻的 变化,新的过程控制信息体系形成,由低层到上层依次为现场智能控制层,工业过 程管理层和经营决策层。智能仪表在工业现场的大量采用,提供了以前无法得到的 大量信息,各个层次的集成使得每个层次的信息传递变得非常必要。这就存在着计 算 机内 部 应用程序对现场信息的 共享和 交互问 题。 o p c ( o l e f o r p r o c e s s c o n t r o l ) 技术就是在这样的背景下走上工业控制领域技术发展舞台的。 1 . 1 . 1 o p c技术产生的背景 传统的 s c a d a 监控与数据采集系统) 开发中出现的一个主要问 题是软件的重 复开发,软件不能够重用,资源不能共享,造成大量人力与物力资源的浪费。随着 计算机软件的发展,这种情况有所改观,高级语言中库函数的采用,实现了一定程 度上资源的共享,尤其是面向对象的方法的应用,使得我们可以利用面向对象的继 承等方法大量重用源代码。但这些重用只是对源代码级的重用而不是对可执行文件 级的重用,对每一类库都要重新编译,所以并没有真正实现资源共享,并且对某个 某个模块中某个类库的修改将“ 触一发而动全身” ,引起所有引用该类库的模块的修 改,因此非常难以实现某个模块的升级。同时,为一种语言开发的类库以及函数库 都不能够为其他语言所用,也大大限制了软件的重用。 一般实时监控系统为分布式的结构,实现了人机接口、通信、数据处理等功能 在网络上的分布,同时将一个系统划分为各个子系统,降低了系统的复杂程度,改 善了系统性能,便于整个系统的开发,减少了开发周期与维护费用。但由于系统各 个计算机的通信协议依赖于某个厂家,没有形成统一的标准,不同厂家之间的软件 与硬件的集成难于实现。因此也没有真正实现不同厂家的软件共享。 从更广泛的意义上看,新的过程控制信息体系的各层都有着各自的要求,他们 都要求信息的一致性。 现场控制层:智能现场设备的出现,可以提供过去不能提供的大量丰富的有关 此现场设备的信息。所有这些信息必须以一致的方式提供给客户应用程序。 过程管理层:d c s( 集散控制系统)和 s c a d a必须以统一的方式为操作员和 工程师等决策者提供数据。 经营决策层:对生产过程信息的综合,有助于企业最优生产,节省财政开支。 而向客户应用程序以统一的方式提供信息,可最小化企业在信息综合上的精力。 华 北电力大 学( 北京姆 卜 学位论.文 第一章 引言 1 . 1 o p c技术概述 随着计算机、微电子、通信和网络技术的发展,工业控制领域也发生着深刻的 变化,新的过程控制信息体系形成,由低层到上层依次为现场智能控制层,工业过 程管理层和经营决策层。智能仪表在工业现场的大量采用,提供了以前无法得到的 大量信息,各个层次的集成使得每个层次的信息传递变得非常必要。这就存在着计 算 机内 部 应用程序对现场信息的 共享和 交互问 题。 o p c ( o l e f o r p r o c e s s c o n t r o l ) 技术就是在这样的背景下走上工业控制领域技术发展舞台的。 1 . 1 . 1 o p c技术产生的背景 传统的 s c a d a 监控与数据采集系统) 开发中出现的一个主要问 题是软件的重 复开发,软件不能够重用,资源不能共享,造成大量人力与物力资源的浪费。随着 计算机软件的发展,这种情况有所改观,高级语言中库函数的采用,实现了一定程 度上资源的共享,尤其是面向对象的方法的应用,使得我们可以利用面向对象的继 承等方法大量重用源代码。但这些重用只是对源代码级的重用而不是对可执行文件 级的重用,对每一类库都要重新编译,所以并没有真正实现资源共享,并且对某个 某个模块中某个类库的修改将“ 触一发而动全身” ,引起所有引用该类库的模块的修 改,因此非常难以实现某个模块的升级。同时,为一种语言开发的类库以及函数库 都不能够为其他语言所用,也大大限制了软件的重用。 一般实时监控系统为分布式的结构,实现了人机接口、通信、数据处理等功能 在网络上的分布,同时将一个系统划分为各个子系统,降低了系统的复杂程度,改 善了系统性能,便于整个系统的开发,减少了开发周期与维护费用。但由于系统各 个计算机的通信协议依赖于某个厂家,没有形成统一的标准,不同厂家之间的软件 与硬件的集成难于实现。因此也没有真正实现不同厂家的软件共享。 从更广泛的意义上看,新的过程控制信息体系的各层都有着各自的要求,他们 都要求信息的一致性。 现场控制层:智能现场设备的出现,可以提供过去不能提供的大量丰富的有关 此现场设备的信息。所有这些信息必须以一致的方式提供给客户应用程序。 过程管理层:d c s( 集散控制系统)和 s c a d a必须以统一的方式为操作员和 工程师等决策者提供数据。 经营决策层:对生产过程信息的综合,有助于企业最优生产,节省财政开支。 而向客户应用程序以统一的方式提供信息,可最小化企业在信息综合上的精力。 华 北电力人 学( 北京) 硕卜 学 位论文 为了有效地完成信息集成,关键是制订一种集中于数据访问而不是数据类型的 开放的、 有效的通信标准。 定义o p c的目 的就是为应用程序访问工厂前台提供共同 的方法,允许兼容的应用程序无缝的访问生产环境中的数据。 图1 - 1说明了o p c技术应用前后的软件结构框图比较,从中可以看到 o p c技 术的优势。 应用软件 笠 应用软件 y (.笋 服务器 a 服务器 c 应用软件 x o p c 客户 应用软件 y o p c客户 !opca $ opca raa 2 . 1 c o m技术简介 2 . 1 . 1 c o m概念 c o m ( c o m p o n e n t o b j e c t m o d e l , 组件对 象模型) 是由m i c r o s o f t 提出的 组件标 准,是 o l e , a c t i v e x , d c o m技术的基础,它不仅定义了组件程序之间进行交互 的标准,并且也提供了组件程序运行所需的环境。该模型的定义是为了实现语言无 关、厂商无关、位置透明以及减少版本问题,从而使得来自不同厂商的、不同语言 编写和运行在不同平台上的c o m对象能够彼此协调地运行,共同实现某一任务。 在 c o m标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库 ( d l l ) ,被称为进程内组件 ( i n - p r o c e s s c o m p o n e n t ) ;也可以是一个可执行程序 ( e x e ) , 被称作进程外组件 ( o u t - p r o c e s s c o m p o n e n t ) 。 一个组件程序可以包含一个 或多个组件对象,因为 c o m是以对象为基本单元的模型,所以在程序与程序之间 进行通信时,通信的双方应该是组件对象 ( 或 c o m对象) ,而组件程序 ( 或 c o m 程序)无论是d l l 程序还是e x e程序都是提供c o m对象的代码载体。 2 . 1 .2 c o m对象 c o m提供的是面向对象的组件模型,c o m组件提供给客户的是以对象形式封 装起来的实体。 客户程序与c o m组件程序进行交互的实体是c o m对象, 它并不关 心组件模块的名称和位置( 位置透明性) , 但必须知道自己在与哪个 c o m对象交互。 类似于 c 十 + 语言中类 ( c l a s s )的概念,c o m对象也包含属性 ( 也称状态)和 方法 ( 也称操作) ,对象的状态反映了对象的存在,也是区别于其它对象的要素; 而对象所提供的方法就是对象提供给外界的接口,客户必须通过接口才能获得对象 的服务。对于 c o m 对象来说,接口是它与外界进行交互的唯一途径,因此,封装 特性是c o m对象的基本特征。 c o m对象不同于像c + 十 等面向对象语言中对象的概念,c o m对象是建立在二 进制可执行代码级的基础上,而 c 十 + 等语言中的对象是建立在源代码级基础上的, 因此 c o m对象是语言无关的,这一特性使用不同编程语言开发组件对象进行成为 可能。 c o m对象也具有可重用性,它表现在c o m对象的包容和聚合, 一个对象可以 完全使用另一个对象的所有功能。并且 c o m 对象的重用是动态的,即被 包容或被 华 北电力大 学( 北京) 硕七学位论文 第二章 o p g 技术的基础-g o m 技术 o f c技术是基于微软的 c o m i d c o m 技术而建立起来的一项技术,对 c o m/ d c o m技术的理解是它的难点所在,本章重点介绍的是 c o m/ d c o m技术。 ; 2 . 1 c o m技术简介 2 . 1 . 1 c o m概念 c o m ( c o m p o n e n t o b j e c t m o d e l , 组件对 象模型) 是由m i c r o s o f t 提出的 组件标 准,是 o l e , a c t i v e x , d c o m技术的基础,它不仅定义了组件程序之间进行交互 的标准,并且也提供了组件程序运行所需的环境。该模型的定义是为了实现语言无 关、厂商无关、位置透明以及减少版本问题,从而使得来自不同厂商的、不同语言 编写和运行在不同平台上的c o m对象能够彼此协调地运行,共同实现某一任务。 在 c o m标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库 ( d l l ) ,被称为进程内组件 ( i n - p r o c e s s c o m p o n e n t ) ;也可以是一个可执行程序 ( e x e ) , 被称作进程外组件 ( o u t - p r o c e s s c o m p o n e n t ) 。 一个组件程序可以包含一个 或多个组件对象,因为 c o m是以对象为基本单元的模型,所以在程序与程序之间 进行通信时,通信的双方应该是组件对象 ( 或 c o m对象) ,而组件程序 ( 或 c o m 程序)无论是d l l 程序还是e x e程序都是提供c o m对象的代码载体。 2 . 1 .2 c o m对象 c o m提供的是面向对象的组件模型,c o m组件提供给客户的是以对象形式封 装起来的实体。 客户程序与c o m组件程序进行交互的实体是c o m对象, 它并不关 心组件模块的名称和位置( 位置透明性) , 但必须知道自己在与哪个 c o m对象交互。 类似于 c 十 + 语言中类 ( c l a s s )的概念,c o m对象也包含属性 ( 也称状态)和 方法 ( 也称操作) ,对象的状态反映了对象的存在,也是区别于其它对象的要素; 而对象所提供的方法就是对象提供给外界的接口,客户必须通过接口才能获得对象 的服务。对于 c o m 对象来说,接口是它与外界进行交互的唯一途径,因此,封装 特性是c o m对象的基本特征。 c o m对象不同于像c + 十 等面向对象语言中对象的概念,c o m对象是建立在二 进制可执行代码级的基础上,而 c 十 + 等语言中的对象是建立在源代码级基础上的, 因此 c o m对象是语言无关的,这一特性使用不同编程语言开发组件对象进行成为 可能。 c o m对象也具有可重用性,它表现在c o m对象的包容和聚合, 一个对象可以 完全使用另一个对象的所有功能。并且 c o m 对象的重用是动态的,即被 包容或被 华北电力大学( 北京) 倾 卜 学 位论文 聚合对象的版本更新或功能增强后,包容或聚合对象根本不需要重新编译或者重新 设置。 2 . 1 .3 c o m对象的标识一c i s i d c o m组件的位置对客户来说是透明的,它并不直接去访问c o m组件, 客户程 序是通过一个全局唯一标识符进行对象的创建和初始化工作。 c o m规范采用的全局 唯一标识符( q u i d , g l o b a l u n i q u e i d e n t i f i e r ) 是一个1 2 8 位的随机数, 不需要专门 机构进行分配和管理,但由于它的随机性,所以并不绝对保证唯一性,但发生标识 符相重的可能性非常小,因为它的随机性是通过空间性和时间值两方面予以保证 的。 v i s u a l c + + 提供了两个工具可产生1 2 8 为g u i d : u u i d g e n . e x 。 和g u i d g e n . e x e , 前者是一个命令行程序,后者是一个基于对话框的程序,这样免去了手工构造 1 2 8 位g u i d的麻烦。 c l s i d是用来标识 c o m对象的 g u i d,因此 c l s i d在结构定义上与 g u i d一 致。如在c / c + + 中可如下描述: t y p e d e f s t r u c t _ g u i d u n s i g n e d l o n g x ; u n s i g n e d s h o r t s l ; u n s i g n e d s h o r t s 2 ; u n s i g n e d c h a r c 8 ; g u i d ; t y p e d e f g u i d c l s i d ; e x t e r n c c o n s t c l s i d c l s i d _ o p c s e r v e r 二 o x a b b e 4 8 8 8 ,o x c a d o , o x 4 a 9 3 , o x a 3 ,0 x 0 7 , o x o f , o x l 5 , o x 7 2 , o x b 4 , o x 3 f , o x 7 6 ; 注: e x t e r n c ,表示 使 用c 编 译 规则。 2 . 2 c o m 接口 c o m对象和它的客户之间通过接口进行交互, 因此c o m接口的定义至关重要。 c o m规范的核心内容就是关于接口的定义。 接口的标识、 接口的调用习惯、 参数处 理、 接口与对象的关系以及接口与c / c + 十 的关系、 c o m接口所具有的特性等都需要 仔细探讨。 2 .2 . 1 接口的定义和标识 从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代 码可以调用组件对象的功能。接口定义了一组成员函数,这组成员函数是组件对象 . 6. 华北电力大学( 北京) 倾 卜 学 位论文 聚合对象的版本更新或功能增强后,包容或聚合对象根本不需要重新编译或者重新 设置。 2 . 1 .3 c o m对象的标识一c i s i d c o m组件的位置对客户来说是透明的,它并不直接去访问c o m组件, 客户程 序是通过一个全局唯一标识符进行对象的创建和初始化工作。 c o m规范采用的全局 唯一标识符( q u i d , g l o b a l u n i q u e i d e n t i f i e r ) 是一个1 2 8 位的随机数, 不需要专门 机构进行分配和管理,但由于它的随机性,所以并不绝对保证唯一性,但发生标识 符相重的可能性非常小,因为它的随机性是通过空间性和时间值两方面予以保证 的。 v i s u a l c + + 提供了两个工具可产生1 2 8 为g u i d : u u i d g e n . e x 。 和g u i d g e n . e x e , 前者是一个命令行程序,后者是一个基于对话框的程序,这样免去了手工构造 1 2 8 位g u i d的麻烦。 c l s i d是用来标识 c o m对象的 g u i d,因此 c l s i d在结构定义上与 g u i d一 致。如在c / c + + 中可如下描述: t y p e d e f s t r u c t _ g u i d u n s i g n e d l o n g x ; u n s i g n e d s h o r t s l ; u n s i g n e d s h o r t s 2 ; u n s i g n e d c h a r c 8 ; g u i d ; t y p e d e f g u i d c l s i d ; e x t e r n c c o n s t c l s i d c l s i d _ o p c s e r v e r 二 o x a b b e 4 8 8 8 ,o x c a d o , o x 4 a 9 3 , o x a 3 ,0 x 0 7 , o x o f , o x l 5 , o x 7 2 , o x b 4 , o x 3 f , o x 7 6 ; 注: e x t e r n c ,表示 使 用c 编 译 规则。 2 . 2 c o m 接口 c o m对象和它的客户之间通过接口进行交互, 因此c o m接口的定义至关重要。 c o m规范的核心内容就是关于接口的定义。 接口的标识、 接口的调用习惯、 参数处 理、 接口与对象的关系以及接口与c / c + 十 的关系、 c o m接口所具有的特性等都需要 仔细探讨。 2 .2 . 1 接口的定义和标识 从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代 码可以调用组件对象的功能。接口定义了一组成员函数,这组成员函数是组件对象 . 6. 华北电力大学( 北京) 倾 卜 学 位论文 聚合对象的版本更新或功能增强后,包容或聚合对象根本不需要重新编译或者重新 设置。 2 . 1 .3 c o m对象的标识一c i s i d c o m组件的位置对客户来说是透明的,它并不直接去访问c o m组件, 客户程 序是通过一个全局唯一标识符进行对象的创建和初始化工作。 c o m规范采用的全局 唯一标识符( q u i d , g l o b a l u n i q u e i d e n t i f i e r ) 是一个1 2 8 位的随机数, 不需要专门 机构进行分配和管理,但由于它的随机性,所以并不绝对保证唯一性,但发生标识 符相重的可能性非常小,因为它的随机性是通过空间性和时间值两方面予以保证 的。 v i s u a l c + + 提供了两个工具可产生1 2 8 为g u i d : u u i d g e n . e x 。 和g u i d g e n . e x e , 前者是一个命令行程序,后者是一个基于对话框的程序,这样免去了手工构造 1 2 8 位g u i d的麻烦。 c l s i d是用来标识 c o m对象的 g u i d,因此 c l s i d在结构定义上与 g u i d一 致。如在c / c + + 中可如下描述: t y p e d e f s t r u c t _ g u i d u n s i g n e d l o n g x ; u n s i g n e d s h o r t s l ; u n s i g n e d s h o r t s 2 ; u n s i g n e d c h a r c 8 ; g u i d ; t y p e d e f g u i d c l s i d ; e x t e r n c c o n s t c l s i d c l s i d _ o p c s e r v e r 二 o x a b b e 4 8 8 8 ,o x c a d o , o x 4 a 9 3 , o x a 3 ,0 x 0 7 , o x o f , o x l 5 , o x 7 2 , o x b 4 , o x 3 f , o x 7 6 ; 注: e x t e r n c ,表示 使 用c 编 译 规则。 2 . 2 c o m 接口 c o m对象和它的客户之间通过接口进行交互, 因此c o m接口的定义至关重要。 c o m规范的核心内容就是关于接口的定义。 接口的标识、 接口的调用习惯、 参数处 理、 接口与对象的关系以及接口与c / c + 十 的关系、 c o m接口所具有的特性等都需要 仔细探讨。 2 .2 . 1 接口的定义和标识 从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代 码可以调用组件对象的功能。接口定义了一组成员函数,这组成员函数是组件对象 . 6. 华北电力大学( 北京) 硕 : 学 位论文 暴露出来的所有信息,客户程序利用这些函数获得组件对象的服务。 客户程序用一个指向接口数据结构的指针来调用接口成员函数。 如图2 - 1 所示, 接口指针实际上又指向另一个指针, 这第二个指针指向一组函数, 成为接口函数表, 接口函数表中每一项为4 个字节长度的函数指针,每个函数指针与对象的具体实现 连接起来。 通过这种方式, 客户只要获得了接口指针, 就可调用到对象的实际功能。 d v t a b l e v ta bl e 图 2 - 1接口结构 通常我们把接口函数表称为虚函数表 ( v i r t u a l f u n c t i o n t a b l e ,简称v t a b l e ) ,指 向v t a b l 。 的 指针为p v t a b l e 。 对于一个接口 来说, 它的 虚函 数表v t a b l e 是确定的, 因 此接口成员函数个数是不变的,而且成员函数的先后顺序也是不变的;对于每个成 员函数其参数和返回值也是确定的。在一个接口的定义中,所有这些信息都必须在 二进制一级确定,不管什么语言,只要能支持这样的内存结构描述,就可以定义接 口 。 因为接口被用于组件程序和客户程序之间的通信桥梁,所以接口应该具有不变 性,一个 c o m对象可以支持很多个接口。但客户程序如何来标识一个接口呢?类 似于c o m对象的标识方法, c o m接口也采用全局唯一标识符, 被称为接口标识符 ( i i d, i n t e r f a c e i d e n t i f i e r ) 。如: e x t e r n c c o n s t i i d i i d i un k n o wn二 0 x 0 0 0 0 0 0 0 0 , 0 x 0 0 0 0 ,0 x 0 0 0 0 , o x c o , 0 x 0 0 , o x o o , o x o o , o x o o , o x o o , o x o o , o x 4 6 ; 如果客户要使用一个 c o m 对象的某个接口,则它必须知道该接口的 i i d和接 口所能够提供的方法。 2 .2 .2 接口描述语言i d l c o m 规范采用 o s f ( o p e n s o f t w a r e f o u n d a t i o n ,开放软件基金会)的 d c e ( d i s t r i b u t e d c o m p u t i n g e n v i r o n m e n t , 分布式计算环境) 规范描述远程调用接口i d l ( i n t e r f a c e d e s c r i p t i o n l a n g u a g e , 接口 描述语言) 的 基础上, 进行扩 展形成了c o m接 口的描述语言。 接口描述语言提供了一种不依赖于任何语言的接口描述方法, 因此, 它可以成为组件程序和客户程序之间的共同语言。 c o m规范使用的i d l接口描述语言不仅可用于定义 c o m接口, 同时还定义了 一些常用的数据类型。 也可以描述自定义的数据结构,对于接口成员函数,我们可以 华北电力大学( 北京) 硕 : 学 位论文 暴露出来的所有信息,客户程序利用这些函数获得组件对象的服务。 客户程序用一个指向接口数据结构的指针来调用接口成员函数。 如图2 - 1 所示, 接口指针实际上又指向另一个指针, 这第二个指针指向一组函数, 成为接口函数表, 接口函数表中每一项为4 个字节长度的函数指针,每个函数指针与对象的具体实现 连接起来。 通过这种方式, 客户只要获得了接口指针, 就可调用到对象的实际功能。 d v t a b l e v ta bl e 图 2 - 1接口结构 通常我们把接口函数表称为虚函数表 ( v i r t u a l f u n c t i o n t a b l e ,简称v t a b l e ) ,指 向v t a b l 。 的 指针为p v t a b l e 。 对于一个接口 来说, 它的 虚函 数表v t a b l e 是确定的, 因 此接口成员函数个数是不变的,而且成员函数的先后顺序也是不变的;对于每个成 员函数其参数和返回值也是确定的。在一个接口的定义中,所有这些信息都必须在 二进制一级确定,不管什么语言,只要能支持这样的内存结构描述,就可以定义接 口 。 因为接口被用于组件程序和客户程序之间的通信桥梁,所以接口应该具有不变 性,一个 c o m对象可以支持很多个接口。但客户程序如何来标识一个接口呢?类 似于c o m对象的标识方法, c o m接口也采用全局唯一标识符, 被称为接口标识符 ( i i d, i n t e r f a c e i d e n t i f i e r ) 。如: e x t e r n c c o n s t i i d i i d i un k n o wn二 0 x 0 0 0 0 0 0 0 0 , 0 x 0 0 0 0 ,0 x 0 0 0 0 , o x c o , 0 x 0 0 , o x o o , o x o o , o x o o , o x o o , o x o o , o x 4 6 ; 如果客户要使用一个 c o m 对象的某个接口,则它必须知道该接口的 i i d和接 口所能够提供的方法。 2 .2 .2 接口描述语言i d l c o m 规范采用 o s f ( o p e n s o f t w a r e f o u n d a t i o n ,开放软件基金会)的 d c e ( d i s t r i b u t e d c o m p u t i n g e n v i r o n m e n t , 分布式计算环境) 规范描述远程调用接口i d l ( i n t e r f a c e d e s c r i p t i o n l a n g u a g e , 接口 描述语言) 的 基础上, 进行扩 展形成了c o m接 口的描述语言。 接口描述语言提供了一种不依赖于任何语言的接口描述方法, 因此, 它可以成为组件程序和客户程序之间的共同语言。 c o m规范使用的i d l接口描述语言不仅可用于定义 c o m接口, 同时还定义了 一些常用的数据类型。 也可以描述自定义的数据结构,对于接口成员函数,我们可以 华北电力大学( 北京) 硕士 学位论文 指定每个参数的类型、输入输出特性,甚至支持可变长度的数组的描述。i d l支持 指针类型,与c / c + + t r 类似。 v i s u a l c + + 提供了mi d l工具,可以把i d l接口描述文件编译成c / c + + 兼容的 接口描述头文件 ( . h ) ,可被组件程序和客户程序所使用。 2 .2 .3 c o m接口特性 i 二进制特性 接口规范并不建立在任何编程语言的基础上,而是规定了二进制一级的标准。 任何语言只要有足够的表达能力,它就可以对接口进行描述,从而可以用于与组件 程序有关的应用开发。 2 .接口不变性 接口 是客户程序和组件程序之间的桥梁,应具有不变性,只要客户程序和组件 程序都按照即定的接口设计进行开发,则可保证两者独立开发结束后它们的协作能 力能达到预期的效果。 3 .继承性 ( 扩展性) 接口也可以继承发展,但接口继承只是说明继承,即派生的接口

温馨提示

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

评论

0/150

提交评论