常春华的专栏

更深层次的软件问题,往往隐藏在文化之中 。

原创 COM学习笔记(二)收藏

新一篇: COM学习笔记(三) | 旧一篇: COM学习笔记(一)

 

起源符合文件

文件的存储

记事本程序,这样的文件叫:非结构化文件;

打开电子表格,保存学生信息和成绩,这叫标准结构化文件;

把特定的数据按照一定的结构和顺序写到文件中保存,这叫自定义结构化文件;(视图和数据两者的区别就涉及到这些内容。)

如果我们这样想,怎样在WORD里面嵌入EXECL,也就是所怎样把WORD 产生的DOC文件和EXCEL产生的XLS文件保存在一起呢?(微软是这么解决的:把磁盘文件的管理方式移植到文件中,也就是复合文件,也就是文件中的文件。)

复合文件的特点:树型结构,流对象是真正的保存数据的空间;不同进程,或者同一进程中不同线程可以访问一个复合文件的不同部分而不相互干扰;增量访问;

浏览复合文件的方法:vc目录\Common\Tools\DFView.exe

复合文件的函数:

WIN API 函数:

StgCreateDocfile():建立一个复合文件,得到根存储对象;

StgOpenStorage(),打开一个复合文件,得到根存储对象;

StgIsStorageFile()判断是否是一个复合文件。

IStorage函数:

CreateStorage(): 建立一个子存储对象;

CreateStorm(): 建立一个流对象;

……

例子:

///////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////
void SampleCreateDoc()
{
 ::CoInitialize(NULL);     //COM初始化

 HResult r; //函数执行返回值
 IStorage *pStg = NULL;
 IStorage *pSub = NULL;
 IStream  *pStm = NULL;

 hr = ::stgCreateDocfile(
  L"c:\\a.stg",
  STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
  0,
  &pStg);
 Assert(SUCCEEDED(hr));  // 其实这个地方应该使用的是判断条件加异常处理

 if(pStg)
 {
  pStg->Release();
 }

 ::CoUnInitialize(NULL);
}

复合文件,结构化存储是微软组件思想的源泉,在此基础上出现了持续性,命名,ActiveX, 对象的嵌入,现场激活等等新技术,新概念。

继续《COM原理和应用》……

在COM模型中,对象本身对客户来说是不可见的,客户只能通过接口来进行。

GUID:(Globally Unique Identifier)全局唯一标识符,客户就是通过它获得接口的指针,再通过接口指针,客户就可以调用其相应的成员函数。

与接口类似,CLSID(class Identifier,类标识符或者类ID).

也就是说,只要系统中含有这类COM对象的信息,并包括COM对象所在的模块文件,COM对象在代码中的入口点,客户程序就可以通过CLSID来创建COM对象。

怎样来使用COM对象提供的服务呢?

客户创建对象以后,我们得到的是指向对象的某个接口的指针,然后我们就可以调用该接口提供的服务。所以对象的表现其实也就是一组接口。

COM对象的状态:首先要说的一点是COM对象是可以没有状态的,它就类似于API了。

CLSID: 间接方式描述这个对象数据的处理程序路径。

产生CLSID的方式:

1)自动产生;

2)自己手写;

3)CoCreateGUID()产生CLSID;

4)工具产生;vc目录\Common\Tools\GuidGen.exe

 

COM库:

COM除了规范,当然也有自己的代码实现部分,在Microsoft Windows系统下面,这些文件都是以.dll文件的形式存在的。

dll的内容包括:提供了少量的API函数实现客户和服务器端COM应用的创建过程。客户端是一个创建函数,而在服务器端,主要提供的是对象的访问的支持。

2)COM通过注册表查找本地服务器也就是EXE程序,以及程序名与CLSID的转换;

3)提供了标准的农村控制方法,使应用控制进程中内存的分配;

COM的好处是什么呢?我们在编写COM应用的时候,可以不用编写为进行COM通信而必须的大量的基础代码,而直接利用COM库提供的API进行编程,大大加快了开发的速度。另外是COM有更多的特性为我们所利用。

 

COM的特性:

语言无关性;为我们的垮语言合作开发提供了统一的标准;

进程透明性:进程内服务程序,本地服务程序,远程服务程序。

可重用性:使得复杂得系统简化为一些简单的对象模型。

 

COM的发展前景:

 

发表于 @ 2008年04月17日 20:24:00|评论(loading...)|编辑

新一篇: COM学习笔记(三) | 旧一篇: COM学习笔记(一)

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 常春华