一、前言 书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 x ls(Ex cel) 数据的问题了
那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 x ls 数据的时候,它该如何启动 Ex cel 呢
启动后,又如何让 Ex cel 自己去读入、解析、显示 x ls 数据呢
二、CLSID 概念 有一个非常简单的解决方案,那就是在对象数据的前面,保存有处理这个数据的程序名
(见下图左上) 图一、CLSID 的概念 这的确是一个简单的方法,但同时问题也很严重
在“张三”的计算机上,Ex cel 的路径是:"c:\office\Ex cel
ex e",如果把这个
doc 文件复制到“李四”的计算机上使用,而“李四”的 Ex cel 的路径是: "d:\Program files\Microsoft Office\Office\Ex cel
ex e",完蛋了 于是,微软想出了一个解决方案,那就是不使用直接的路径表示方法,而使用一个叫 CLSID(注 1)的方式间接描述这些对象数据的处理程序路径
CLSID 其实就是一个号码,或者说是一个 16 字节的数
观察注册表(上图),在 HKCR\CLSID\{
}主键下,LocalServer32(DLL 组件使用 InprocServer32) 中保存着程序路径名称
CLSID 的结构定义如下: typedef struct _GUID { DWORD Data1; // 随机数 WORD Data2; // 和时间相关 WORD Data3; // 和时间相关 BYTE Data4[8]; // 和网卡 MAC相关 } GUID; typedef GUID CLSID; // 组件 ID typedef GUID IID; // 接口 ID #define REFCLSID co