欢迎来到天天文库
浏览记录
ID:59253976
大小:14.02 KB
页数:2页
时间:2020-09-08
《MFC和组件对象模型COM.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、组件对象模型COM是组件对象模型(ComponentObjectModel)的首字母缩略词。COM是一种方法,用于创建一个独立于任何编程语言的对象。C++类具有成员函数,而COM对象具有“方法”。这些方法组织在“接口”中,通过“接口指针”来调用它们。接口将语义相关的方法组合在一起。每一个COM对象都实现了一个名为IUnkown的接口(通用的COM程序习惯在接口名字前加一个大写的“I”)。IUnkown只包含3种,如表1所示。表1IUnkown的3种方法方法名称说明QueryInterfaceAdd
2、RefRelease返回指向另一个接口的指针增加对象的引用计数减少对象的引用计数COM的规则规定:只要给定一个指向接口的指针,客户就可以通过该指针调用任意一个IUnkown方法,以及所有属于该接口的特殊方法。也就是说,所有接口除了支持它们自己的方法外还支持这3个IUnkown方法。图1是一个简单的COM对象示意图,图中的细棒代表对象的接口,通常都会忽略IUknown接口,因为所有其他接口都可以访问该接口。IMathISpellingIUknown图1一个简单的COM对象实际上COM中的接口是用数字
3、标记而不是名字标记的。“接口标识”(或称为IID)是一个128位的值,它唯一的标识了每一个接口。要生成IID,可以用VisualC++中的命令行工具Unidgen;另一个是用GUI应用程序Guidgen。也可以用COMAPI函数CoCreateGuid通过编程来生成。实例化COM对象COM类也像接口一样用128位的值来标识。标识类的GUID称为“类ID”或CLSID。要实例化一个对象,用户只需知道该对象的CLSID就可以了。COM有自己的API来创建对象实例。最常用的是CoCreateInstan
4、ce,它接受一个CLSID并返回一个指向对象的接口指针。下列语句实例化了一个CLSID为SLSID_Object的COM类,并将对象的IMath接口的指针保存在pMath中:IMath*pMath;CoCreateInstance(CLSID_Object,NULL,CLSCTXX_SERVER,IID_IMath,(void**)&pMath);其中的IID_Math只是一个变量,用来保存IMath的128位接口ID。一旦有了接口指针,用户就可以使用->运算符来调用该接口上的方法了。如下语句调用
5、IMath::Add方法:intsum;pMath->Add(2,2,&sum);对象生存周期C++程序员习惯使用new运算符在堆上创建对象。并通过delete来删除用new创建的对象。COM却与C++不同,用户创建对象实例但却不删除它们,而由COM对象来删除它们。。引用计数记录了指向对象中接口指针的用户数量。引用计数在调用AddRef时递增,在调用Release时递减。获得接口指针用户可以通过指针来调用IUnknown中的QueryInterface来获得对象所支持的其他所有接口指针。COM服务
6、器
此文档下载收益归作者所有