起源符合文件
文件的存儲
記事本程序,這樣的文件叫:非結構化文件;
打開電子表格,保存學生信息和成績,這叫標準結構化文件;
把特定的數據按照一定的結構和順序寫到文件中保存,這叫自定義結構化文件;(視圖和數據兩者的區別就涉及到這些內容。)
如果我們這樣想,怎樣在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的發展前景: