COM组件技术探究

摘要:COM Component(COM组件)技术是开发软件组件的方法,是微软公司为了解决软件复用,缩短软件开发时间而开发的一种新的软件开发技术。对COM组件的接口、COM组件的实现以及与普通DLL的区别进行了探究,以COM组件开发为研究视角,对COM组件开发的原理和方法进行分析,结合实例说明具体的开发步骤,并对COM组件在PHP上的调用方法做了具体示例。

关键词:COM;组件对象模型;接口

中***分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)33-0096-03

Abstract: COM (Component Object Model) component technology is a method of developing software components. It is a new software development technology developed by Microsoft Corporation in order to solve software reuse and shorten software development time. This paper mainly discusses the interface of COM component, the realization of COM component and the difference between it and common DLL. It analyzes the principle and method of COM component development from the perspective of COM component development. Combined with an example to describes the specific development steps and calling the COM component on PHP.

Key words: COM; Component Object Model; Interface

1 概述

COM组件技术是一种十分完善的面向对象的技术规范。通常是以WIN32动态链接库(DLL)或可执行文件(EXE)的形式的可执行代码组成的,可以在跨平台条件下实现调用,对于代码重用有很大的意义。COM组件的核心思想是定义软件中可以重用的部分,实现代码复用。

COM组件的核心是组件和接口。其中组件是具有一定逻辑功能的可执行代码,而接口实现了对组件代码的封装与隔离。通常情况下一个有两个接口的COM组件如***1所示:

2 COM组件接口

COM组件最重要的部分是组件的接口。COM组件通过接口与外界进行联系,外界使用COM组件也必须知道COM组件的接口。因此COM组件的接口在系统中起着决定性作用。每个COM组件都必须有这三个接口:IUnknown、IClassFactory和IDispatch,其他接口都是直接或间接从这个接口派生而来。

2.1 基本接口

COM组件的基本接口是Iunknown接口,在COM组件中所有接口都以“I”开头。Iunknown接口的主要作用是对COM组件的所有接口进行标准化,以方便调用COM组件。COM组件的接口都必须符合一定的规范,在这个规范中规定任何一个接口都继承于Iunknown接口,@个接口主要有以下几个函数:

这里用struct定义Interface,由于struct关键字的成员属性为public,接口是用来与外界进行联系,接口的成员属性也应该为public。这里用_stdcall标记的函数将使用标准的调用约定,用这个关键字修饰的函数的参数将以堆栈从右向左的顺序传递,也就是说这些函数将删除参数在函数返回到调用者之前。QueryInterface函数是对组件进行自我描述的关键字函数,通过这个函数,用户可以查询某个组件是否支持特定的接口。另外的AddRef和Release这两个函数实现了对组件调用次数的引用计数。通过使用这两个函数,使组件可以自己实现删除内存。在COM组件中将对引用计数这个值进行维护,当用户从COM组件中取得一个接口时,将这个值加一,当用户使用完这个接口时,这个值减一。当引用计数为零时,彻底将组件从内存中删除。AddRef函数用来对引用计数值加一,Release对引用计数的值减一。

2.2 接口IClassFactory

IClassFactory的作用是创建COM组件。每个组件都必须有一个与之相关的类厂,由类厂创建组件实例,然后把实例指针交给客户程序。IClassFactory最重要的一个函数就是CreateInstance,类厂就是通过调用这个函数创建组件实例的。但是一般情况下不会直接调用它,通过API函数CoCreateInstance进行调用。

2.3 IDispatch调度接口

IDispatch接口也继承于IUnknown接口,对组件执行调度任务。由于COM组件是通过虚函数表来实现对函数的调度的,也就是说COM组件必须使用指针来实现对函数的调度,但是并不是所有的语言都支持指针,因此调度接口就是用来解决这一问题。在调度接口中,将组件的每个函数以及每个属性都进行相应的编号,在客户程序要调用这些函和属性的时候就把这些编号传给IDispatch 接口,再根据这些编号调用相应的函数。

3 COM组件的实现

按照组件在运行时所处的位置,它可分为进程内服务器和进程外服务器,其中进程外服务器又分为本地服务器和远程服务器。进程内服务器是指服务器和客户在同一进程空间中运行的服务器。它是以DLL形式封装的COM组件。以EXE封装的组件叫做进程外组件。

3.1 以动态链接库的形式实现

COM组件可以以动态链接库的形式实现,DLL格式的COM组件可以共享其链入的应用程序的地址空间,方便客户访问函数的指针列表。

3.2 以可执行程序的形式实现

在某些情况下,需要用EXE来实现组件,使EXE可以向外界提供自己擅长的服务功能,客户可以通过接口实现自己很难完成的任务,客户还可以通过接口控制应用程序,更灵活更有效的实现EXE的功能。

在EXE中实现组件和在DLL中实现组件主要有两个区别,一是EXE提供的组件将与客户程序不在同一进程中,这需要用到/残根机制来完成在跨进程的调用中参数的调整。二是EXE不像DLL,它是主动的,可以对自己的生命期进行控制。

4 COM组件与普通DLL的区别

COM组件与DLL都是为解决代码重用设计的,然而两者却有很多不同。COM组件便于升级维护功能扩充,有很好的安全性,可以轻松的实现进程间调用,具有封装、继承、多态的面向对象的特征,而DLL在这些方面都有很大不足。64位的系统不能调用32位的DLL,而将DLL封装成COM组件就可以被64位系统调用了。两者最大的区别是COM组件是以接口方式提供给用户的一种二进制的使用规范,而DLL是以函数集合的方式提供给用户进行调用。

在开发难度上COM组件相对DLL要更为复杂,它需要满足规范,是相对***的模块,可以被其他语言调用,而DLL开发简单可移植性差,在调用上没有COM组件简单。

5 COM组件在PHP上的应用

在Windows平台下,PHP提供了内置的COM功能,利用PHP的COM类可创建有关组件对象的实例,基本格式如下:

$obj =new COM(“ProgID”);

其中COM为类名,ProgID为组件对象名,$obj为组件对象的实例变量。通过实例变量并使用“->”运算符,即可引用组件对象的有关属性、集合与方法。若将实例对象赋值为空(NULL),即可清除相应的对象实例。

下面通过笔者所做的基于COM组件在PHP上调用的实例来说明开发COM组件的过程以及在PHP上调用的方法。

首先打开Visual C++或者Visual Studio新建空白解决方案,添加新建项目,选择ATL项目,选择动B链接库(DLL)选项。打开类视***,添加类,选择ATL简单对象,进入ATL简单对象向导后,就可以设置对象名称,这里我设置的是Fun。在第一个空白框内填写对象名称,其他框会自动填写。

运行网页显示:Hello PHP 2016。调用成功。

在这个基础上,我们可以开发更复杂的COM组件,不过还需要对COM组件接口更深一步的研究。

6 结束语

通过对COM组件技术的研究,可以知道COM组件在使用中有很多优点。COM组件可以很好的实现代码重用,提高软件的复用率,而且也可以增强软件的可靠性,编程者可以跨语言调用COM组件,使用不同的语言开发也不会有影响,而且方便开发者在不同的环境中对COM组件进行调用,不用考虑32位还是64位系统的问题,这些优点都极大的提高软件的开发速度,降低开发成本。然而对COM组件的接口复杂性以及兼容性问题的研究还需要进一步进行研究。随着COM组件技术的不断完善,COM技术的应用将会更加广泛。

参考文献:

[1] 潘恒.中间件技术――COM组件的探究[J].科协论坛,2011(4):61-62.

[2] 赵海春.COM组件的设计与使用 [J].邵阳学院学报:自然科学版,2009,6(1):58.

[3] 孔梦荣,郑秋生,杜献峰.COM 组件技术探究[J].中原工学院学报,2004,15(2):22- 23,70.

[4] 潘爱民原理与应用[M].北京:清华大学出版社,2000.

转载请注明出处学文网 » COM组件技术探究

学习

浅析沉井施工方法

阅读(32)

本文为您介绍浅析沉井施工方法,内容包括沉井的施工技术,论述沉井施工。随着我国城市基础设施建设飞速发展,沉井的应用日益增多。沉井是先在地表制作成一个井筒状的结构物,然后在井壁的围护下通过从井内不断挖土,使沉井在自重作用下逐渐下沉

学习

既有线铁路曲线整正测量技术研究

阅读(44)

本文为您介绍既有线铁路曲线整正测量技术研究,内容包括铁路曲线测量的方法,既有铁路测量技术规则。铁路经过长期运营和维修作业,其平面曲线位置必然会产生较大的错动。为保证行车的平稳和安全,必须要通过曲线整正,使既有曲线恢复良好的圆顺

学习

简论学习风格和学习策略

阅读(48)

摘要:很多大学生刚入大学无法适应大学强调自主学习的模式,本文从学习风格和学习策略的定义入手,讲解了学习风格和学习策略的分类,旨在帮助大学生对自己的学习风格有一定的了解,并对总体的英语学习策略进行了归纳,希望学生能够根据不同的

学习

家作文400字

阅读(33)

本文为您介绍家作文400字,内容包括家为题作文400字左右,家有一宝作文400字。家绵阳实验小学一年级七班王艺涵药房是药品的家,书柜是书的家,衣柜是衣服的家,书包是书本的家,文具盒是铅笔和橡皮擦的家,床是我们休息的家,大树是小鸟的家,医院

学习

“肝胆总督”岑春煊

阅读(32)

本文为您介绍“肝胆总督”岑春煊,内容包括岑春煊骂的姓谭的总督,两广总督岑春煊。姓名岑春煊最开始叫“岑春泽”,中间那个“春”字是皇上赐给他家的排辈的字,皇恩浩荡;而“泽”是他那个做云贵总督的老爹岑毓英起的。所以1889年他老爹前脚驾

学习

女性腿毛浓密也是疾病报警信号等

阅读(43)

本文为您介绍女性腿毛浓密也是疾病报警信号等,内容包括22岁女生突然腿毛很多,女士腿毛特别多是病吗。女性腿毛浓密也是疾病报警信号康博士:我是一名大型企业的文秘,花季年龄加上天生丽质让许多人心生羡慕。可是近来我却发现自己手臂、小腿

学习

唯美食与爱不可辜负

阅读(26)

本文为您介绍唯美食与爱不可辜负,内容包括唯美食与爱不可辜负全文阅读,唯美食与爱不可辜负。最近在网络上看到有网友发了有关美食记忆的小故事,没想到近千人网友跟帖,分享了自己从美食中感受到爱的经历。就是这些人间烟火,在满足我们的口腹

学习

天、地、万物、自然和谐的《草原赞歌》

阅读(45)

本文为您介绍天、地、万物、自然和谐的《草原赞歌》,内容包括关于草原的赞歌,草原赞歌文章。草原是一片神奇的土地,在草原上生活的人们都热情豪放,能歌善舞。由此也就出现了许多优秀的赞美草原的音乐作品。《草原赞歌》就是其中之一。为了

学习

湖南有色金属

阅读(40)

本文为您介绍湖南有色金属,内容包括湖南有色金属简介,湖南有色金属代码。1.选矿尾矿中绢云母的回收、表征及应用研究王全亮,徐勇,周虎强,戴艳萍,代奕华,WANGQuan-liang,XUYong,ZHOUHu-qiang,DAIYan-ping,DAYi-hua2.某低品位钼铜矿石选矿试验研究

学习

手偶游戏 第23期

阅读(34)

和孩子玩的过程中,大人的手也可以是玩具!对小宝宝来说,不需要借助家里的任何道具,只要几个手势的变化,都可以逗得宝宝笑呵呵。例如:用手将整个脸遮住,在从手指缝里偷偷看宝宝,并变化不同的手指缝来偷看,宝宝就会觉得很有趣。又或者在宝宝面前双手

学习

甲醇转化制氢工艺探讨

阅读(27)

本文为您介绍甲醇转化制氢工艺探讨,内容包括甲醇重整制氢汽车最新消息,甲醇制氢转化器。氢气在我国多个工业领域内应用广泛,具有密度小,能量高的特点,是未来的新型高能燃料之一,发展前景看好。制氢气的工业方法有许多,如热化学热分解光催化等

学习

电机测试系统设计

阅读(38)

本文为您介绍电机测试系统设计,内容包括电机性能测试系统制作,电机测试方案模板。在新的电机产品研制过程中,除了必须对设计、工艺过程及理论分析等方面进行研究外,还必须对电机及其模型进行大量的测试,以进一步探索改进和完善的途径。本论

学习

四通八达的香港“八达通”卡

阅读(39)

本文为您介绍四通八达的香港“八达通”卡,内容包括退香港八达通卡手续费,香港八达通卡有三种版本。首次到香港旅游或公干的人,都会被建议,一到香港便去买一张八达通卡,很多人离开时仍旧会保存这张卡,以备下次使用,因为他们都体验到了八达通卡

学习

论唐代中书舍人的职权

阅读(41)

本文为您介绍论唐代中书舍人的职权,内容包括唐朝中书舍人职权,中书舍人职权。唐代中书舍人定额六员,秩正五品上,虽然官位不高,但在朝廷的中枢决策方面扮演着极为重要的角色。中书舍人是令人羡慕的清要之职。唐代中书舍人的职掌范围主要集中

学习

上海自贸区对融资租赁行业影响探究

阅读(31)

本文为您介绍上海自贸区对融资租赁行业影响探究,内容包括浦东自贸区融资租赁政策,上海自贸区融资租赁公司清单。近期上海自贸区的设立为融资租赁行业带来了改革红利,融资租赁行业在未来有望取得更大的发展。本文主要论述中国融资租赁行业

学习

南北朝时期青瓷莲花尊文化内涵探究

阅读(28)

南北朝时期盛行青瓷类型的瓷器,青瓷莲花尊因其精美的造型艺术、浓厚的宗教色彩,成为南北朝时期最为经典的瓷器品种。东汉年间佛教文化开始在我国传播,随着佛教艺术的不断演变,魏晋南北朝时期佛教艺术已经渗入了各个领域。莲花在佛教文化中是

学习

“太原锣鼓”考察探究

阅读(46)

本文为您介绍“太原锣鼓”考察探究,内容包括太原锣鼓七大套完整版,太原锣鼓表演大全。一、太原锣鼓渊源、传承探究所谓鼓舞开先河,鼓文化在我国历史悠久,源远流长,历史中有许多关于太原锣鼓的记载,从这些记载中我们能了解太原锣鼓形成的背景

学习

人工种子的探究及其发展前景

阅读(33)

本文为您介绍人工种子的探究及其发展前景,内容包括人工种子的展望,人工种子的研究历史与进展。【摘要】人工种子是人为制造的种子,它是一种含有植物胚状体或芽、营养成分、激素以及其他成分的人工胶囊。植物组织培养可以诱导植物组织产生

学习

运动中两圆位置关系探究

阅读(32)

本文为您介绍运动中两圆位置关系探究,内容包括圆中两点运动轨迹,圆运动辩证导。圆和圆的位置关系我们可以从两个方面来探索,一是根据定义从公共点的个数,另一方面利用数形结合的思想――根据“圆心距与两圆的半径之间的关系”来判断两圆的

学习

MC尼龙的机械加工及防开裂的实践探究

阅读(35)

本文为您介绍MC尼龙的机械加工及防开裂的实践探究,内容包括尼龙料超声波焊接开裂,怎样鉴别mc尼龙的好坏。MC尼龙是一种新型的工程塑料,它凭借着优秀的优于金属材料的综合性性能,被广泛地应用于工业、农业、国防等领域。在实际生活中,尤以起

学习

探究“解构主义”

阅读(34)

本文为您介绍探究“解构主义”,内容包括解构主义代表人物,解构主义反思。解构主义建筑注重变化推理和随机的统一,即对现有规划约定进行颠倒和反转,它除了解除对象的隶属之外,还强调对片段的组合突破原有限制,使得新的体制具有解体与建构的双

学习

中国区域市场分割探究

阅读(28)

本文为您介绍中国区域市场分割探究,内容包括地方特色市场分析及定位,区域市场差异分析。1市场分割的定义及测度方法1.1市场分割的定义在研究市场分割之前,研究者先要界定市场分割的概念,然而研究市场分割的测度方法,其次研究产生市场分割的