- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM 学习笔记(一)初识 COM
COM--ComponentObject Model, 组件对象模型。历来以难学著称,有人曾说过这样的
话:世界上只有两个程序员真正理解 COM,他们都在微软工作。这句话虽然有点过,但基本 上说出了COM 的确有些难理解。但是,不用紧张,本文并不探求多深多高的技术领域,而
是带领大家浏览一下我们的COM, 就像本文的题目同样:初识COM。
一方面,我们先来了解一下有关COM 的概念:
COM(Component ObjectModel,组件对象模到是微软公司的最高级的、包罗万象 的二进制通信规范,用于软件组件间跨越多个进程、机器、硬件和操作系统进行互操作。
下面我们来看看COM 的一些特点:
在COM 中,应用程序不是通过诸如S h owWind o w()的 API 函数进行操纵。程序是由对 象组成的,对象向外提供一个或多个接口。接口是一组相关的函数,函数操作他们所属的对 象。不能直接访问对象中的数据,而只能通过对象的接口函数访问。学过C++ 和数据结构的
人应当对上述说法并不陌生。
在 C OM 中,没有指向对象的指针这种东西,有的只是指向对象接口的指针。事实上,是指 向另一个指针的指针。第二个指针指向一个指针表,表中的指针指向接口成员函数。该指针
表称为 VTBL。将指针指向对象后,就可以通过调用接口中的成员函数与该对象通信。
如何将指针指向第一个对象呢?可以调用一个返回指向对象指针的COM 函数如:CoCrea
t elnstac e ()。
COM 对象都提供一个叫IUnknown 的接口,该接口包含方法 AddRe f()、Releas e()
和Query Interf ace()。 每个接口都是从IUnkno wn接口派生出来的。前两个方 法操纵一个控制对象使用期限的内部引用计数。当对象第一次被创建时,创建者必须调用该 对象的Ad dRef(), 将计数加1。每当其他的用户将一个指针指向该对象时,必须再次调
用该对象的AddRef() 方法。当用户不再使用对象时,它调用对象的 Re l eas e()方法,将引
用计数减1。当最后一个用户调用对象的Re lease() 方法后,计数值变为0,导致对象
释放自己。
下面是Ad d Ref()和Rele as e()方法的简朴实现:
ULONGIUnk
ULONGIUnk n own::AddR ef(v oid)
{
m RefCoun t++;
return m RefCount;
)
ULONG I Unk nown:: Release(void) {
m RefCount--;A
unt==0)A { delete
re turn 0; A
if(m Re f Co
this;
A return m RefCount;
}
由于每一个对象都支持IUnknown 接口,因此可以通过Query In t e rface()来询问
对象是否支持您感爱好的其它接口。接口通过接口ID 来标记。
HRESULT
HRESULT IUnknown::Querylnterface(REFID rii
d,LPVOID FA R *ppv)
{△ if(ri id==IID IUnknown||riid==IID IDropT
arg e t)A {
*ppv=(LPVOID)this;▲ AddRef();
Return S OK; A } el se {
*ppv=NULL; retur n E NOINTER FACE;
用于唯一地区分COM 中条目的标记符是一个被称为 GUID (全局唯一标记符)或UUID
(通用唯一标记符)。
Typedef
Typedef s truc t GUIDA {
unsigned lon g Data 1;
un signedshort Data2;A unsigned short
Data3; △ unsigne d char Data [8];
}GUID;
GUID 的取值范围非常大, 16个字节也许形成的不同组合为3.4x10^ 38。
在 COM 中传输格式化数据的工作是通过数据对象解决的,数据对象是支持IDat a O b ject
接口的对象。 IDataObj e c t 接口支持以下方法:
IDataObjec
IDataObjec t
文档评论(0)