?? dsp_sdk_.txt
字號:
參數:attr -- 一個整型的數值型的值
描述:序列化屬性中的整型變量,包括int、DWORD、short、WORD、BYTE、char、BOOL類型的變量
類型:方法
定義:void Write(bool attr)
參數:attr -- 一個布爾型的數值
描述:序列化屬性中的布爾型的變量
類型:方法
定義:void Write(const std::string& attr)
參數:attr -- 一個string類型的字符串型變量
描述:序列化屬性中的字符串類型的變量
類型:方法(只有在Window系統下有效)
定義:void Write(const CString& str)
參數:attr -- 一個CString類型的變量
描述:序列化屬性中的字符串類型的變量
類型:方法
定義:void Write(char* const pAttr,DWORD nLen,bool bLast=true)
參數:pAttr -- 一個指向字符型緩沖區的指針
nLen -- 緩沖區的長度
bLast -- 是否為普通緩沖區。
值為true時,表示為普通緩沖區。
值為false時,表示是多段緩沖區;
如果緩沖區為多段緩沖區,則緩沖區中的數據在調用對象的AttrSectRecv()方法時填充;
如果緩沖區不為普通緩沖區,則當前保存在緩沖區中的數據就是要被序列化的數據。
描述:序列化屬性中的二進制流緩沖區
類型:方法
定義:void Write(DSPACT* const pAttr,BOOL bCompress=FALSE,BOOL bVerifyCRC=TRUE,BYTE byInitType=0)
參數:pAttr -- 一個指向DSPACT派生類對象的指針
bCompress -- pAttr所指的對象在序列化時是否壓縮
bVerifyCRC-- pAttr所指的對象在序列化時是否進行CRC校驗
byInitType-- pAttr所指的對象在在反序列化成功后調用對象的Init()方法傳遞的參數
描述:序列化屬性中的一個DSPACT派生類的對象
DSP類的靜態方法
類型:靜態方法
定義:static bool RegisterAct(const char* classID,DSPCALLFUNC(dspActFun),DWORD dwData=0)
參數:classID -- 指向類的ClassID的字符串指針
dspActFun -- DSP回調函數的指針,回調函數定義如下:
DSPACT* FunctionName(const std::string& strID)
該函數在堆中創建一個classID為strID的DSPACT類的派生類的對象,并返回該對象的指針
例如:static DSPACT* PPQ::GetDSPObject(const std::string& strID)
{ return (new PPQ()); };
該函數的指針為:&PPQ::GetDSPObject;
dwData -- 一個32位的指針或數值。對象被反序列化成功后可以得到該值。
返回:true --注冊成功;
false --注冊失敗。
描述:注冊一個類,使在調用反序列化方法時,可以成功地反序列化對象
應用:設置合適的dwData值,可以創建多種應用模型。
在windows系統中,可以充分利用window的消息機制,使反序列化對象自動歸類執行。方法是設定dwData的值為一個消息ID,每一個類的消息ID都不同,在反序列化成功后,只需要向指定的一個窗口發送一個表示該類消息,并且將對象的指針作為參數傳遞。在響應消息的窗口中,只需要相應地對各消息進行處理即可。
另外,充分地利用好反序列化對象的Init()函數,也可以使反序列化后的對象自動執行規定的操作。
類型:靜態方法
定義:static inline BOOL OpenIfstreamForRead(ifstream& ifs,const char* const lpFileName,int nMode=0)
參數:ifs -- 文件輸入流對象
lpFileName-- 打開的文件的文件名
nMode -- 打開的方式
返回:true --文件打開成功;
false --文件打開失敗。
描述:在一個對象中,如果包含一個文件,在序列化對象時,需要采用該方法打開一個文件準備讀,也就是說在序列化對象時,如果一個文件內容需要被序列化,該文件必需以二進制形式打開。
類型:靜態方法
定義:static inline BOOL OpenOfstreamForWrite(ofstream& ofs,const char* const lpFileName,int nMode=0)
參數:ofs -- 文件輸出流對象
lpFileName-- 打開的文件的文件名
nMode -- 打開的方式
返回:true --文件打開成功;
false --文件打開失敗。
描述:在一個對象中,如果包含一個文件,在反序列化對象時,需要采用該方法打開一個文件準備寫,也就是說在反序列化對象時,如果一個文件內容需要被反序列化,該文件必需以二進制形式打開。
DSPACT類的方法說明
DSPACT類是所有可以被序列化和反序列化的對象的基類,如果希望一個類可以被序列化和反序列化,則該類必需是從DSPACT類派生出的一個新類,為了實現類的序列化和反序列化,DSPACT類中包含了幾個虛函數,這些虛函數可以全部都被重載或只重載一部分。DSPACT中的所有方法都是虛函數。
類型:序列化對象所必需包含的宏
定義:SELF_SERIALIZE(classid,className,base_className)
參數:classid -- 類的ID,字符串型式
className -- 類的名字,字符串型式
base_className-- 該類的基類的名字,非字符串型式,不需要被引號括起來
描述:重載了幾個序列化中必需包含的方法,這個宏必需在DSPACT的派生類的頭文件中出現
舉例:類PPQ是直接從類DSPACT派生出的新類,類P2P是直接從類PPQ派生出的新類
SELF_SERIALIZE("PPQ","PPQ",DSPACT);
SELF_SERIALIZE("P2P.Sub@PPQ","P2P",PPQ);
類型:protected虛函數,該函數在SELF_SERIALIZE宏中被重載
定義:virtual BYTE GetClassLevel()
參數:無
描述:得到類的深度,即當前類相對于DSPACT進行了多少次派生。類的最大派生深度為15。
如果一個類直接從DSPACT類派生,則它的類深度為1。
類型:public虛函數,該函數在SELF_SERIALIZE宏中被重載
定義:virtual char* GetClassID()
參數:無
描述:得到類的ClassID。
****ClassID嚴格區分大小寫****
聲明:每一個類都包含有唯一的ClassID,類的ClassID不能相同。類的ClassID采用類似于Internet域名的方法命名---派生類繼承基類的ClassID,并向左增加標識自己類的ClassID,在基類的ClassID和新增加的標識自己類的ClassID之間加入一個'@'字符。派生類和基類的ClassID合在一起,構成派生類的唯一的ClassID。
ClassID采用字符串形式表式,可以使用除'@'之外的任何字符串中允許出現的字符,'@'字符只允許出現在基類和派生類的ClassID之間,不允許出現在其它地方。ClassID的總長度不能超過256個字符。
DSPACT作為最底層的基類,它沒有ClassID。
舉例:類PPQ是直接從類DSPACT派生出的新類,類PPQ的ClassID為"PPQ";
類P2P是直接從類PPQ派生出的新類,類P2P的ClassID為"PP.SUB@PPQ"
類型:public虛函數,該函數在SELF_SERIALIZE宏中被重載
定義:virtual bool IsKindOf(char* lpClassName)
參數:lpClassName -- 類的名字的字符串形式
返回:true --當前對象是指定類的一個實例;
false --當前對象不是指定類的一個實例。
描述:判斷當前對象是否是指定的類的一個實例。
類型:protected虛函數
定義:virtual void Init(BYTE byType){}
參數:byType -- 初始化的類型,可根據類型值,設置不同的初始化過程。取值為[1..15]
應用:充分地利用好反序列化對象的Init()函數,可以使反序列化后的對象自動執行規定的操作。
類型:protected虛函數
定義:virtual bool AttrSectRecv(BYTE byClassLevels,BYTE byAttrNo,const char* const lpBuff,DWORD dwLen,BOOL bLast)
參數:byClassLevels -- 類的深度
byAttrNo -- 當前操作的屬性的序號
lpBuff -- 需要被接收的數據所在緩沖區的首地址
dwLen -- 當前緩沖區中的有效數據的字節數
bLast -- 是否是最后一段被接收的數據
當bLast==true時,表示當前接收的數據是最后一段數據,具有相同的byClassLevels和byAttrNo值的調用,不會再次出現,可以在接收到bLast==true后,并閉文件輸出流或釋放不再需要的資源。也可以不在這個地方處理,當bLast==true后,緊接著會調用UnSerialize()方法,通知該屬性已完成賦值,也可以在UnSerialize()方法中去釋放不需要的資源。
返回:true --接收成功;
false --接收失敗,如果返回false,反序列化過程會終止。
描述:接收大數據量的分段傳送的二進制流數據。
應用:DSP允許在序列化對象時傳送任意大小的文件或動態改變的二進制流緩沖區,傳送這些數據時,數據的大小是不確定的,數據通過AttrSectSend()方法分段賦值,并立即被序列化輸出或傳送,在反序列化過程中,如果接收到這樣的屬性值,則會調用AttrSectRecv()方法接收。
舉例:
bool DSPACT::AttrSectRecv(BYTE byClassLevels,BYTE byAttrNo,const char* const lpBuff,DWORD dwLen,BOOL bLast)
{
if(byClassLevels>1)
return BaseObject::AttrSectRecv(byClassLevels,byAttrNo,dwLen,bLast);
else
{
//屬性的序號必需與Serialize()中的屬性序號相同
switch(byAttrNo)
{
case 1:
break;
}
}
return true;
}
類型:protected虛函數
定義:virtual bool AttrSectSend(BYTE byClassLevels,BYTE byAttrNo,char** const lpBuff,DWORD& dwLen,bool& bContinue)
參數:byClassLevels -- 類的深度
byAttrNo -- 當前操作的屬性的序號
lpBuff -- 需要被傳送的數據所在緩沖區的首地址,每次都可以修改
dwLen -- 當前緩沖區中的有效數據的字節數,每次都可以修改
bContinue -- 是否是最后一段被傳送的數據
當bContinue==true時,表示當前傳送的數據是最后一段數據,具有相同的byClassLevels和byAttrNo值的調用,不會再次出現,應該在設置最后一段數據后,并閉文件輸入流或釋放不再需要的資源。
描述:傳送大數據量的二進制流數據。
應用:DSP允許在序列化對象時傳送任意大小的文件或動態改變的二進制流緩沖區,傳送這些數據時,數據的大小是不確定的,數據通過AttrSectSend()方法分段賦值,并立即被序列化輸出或傳送,在反序列化過程中,如果接收到這樣的屬性值,則會調用AttrSectRecv()方法接收。
舉例:
bool DSPACT::AttrSectSend(BYTE byClassLevels,BYTE byAttrNo,char** const lpBuff,DWORD& dwLen,bool& bContinue)
{
if(byClassLevels>1)
return BaseObject::AttrSectSend(byClassLevels,byAttrNo,lpBuff,dwLen,bContinue);
else
{
//屬性的序號必需與Serialize()中的屬性序號相同
switch(byAttrNo)
{
case 1:
break;
}
}
return true;
}
類型:protected虛函數,派生類對象必需重載該函數
定義:virtual bool Serialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp)
參數:byClassLevels -- 類的深度
byAttrNo -- 當前操作的屬性的序號
dsp -- 進行序列化操作的_DSPPACKET結構
返回:true --表示當前對象的屬性已經全部還原完,該屬性是對象的最后一個屬性
false --表示當前對象的屬性還沒有全部還原完
描述:設置對象中的哪些屬性進行序列化操作,這個方法在對象序列化時會自動調用
舉例:
bool DSPACT::Serialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp)
{
if(byClassLevels>1)
return BaseObject::Serialize(byClassLevels-1,byAttrNo,dsp);
else
{
//屬性的序號從1開始編號,每一個屬性遞增一個序號
switch(byAttrNo)
{
case 1: //序列化第1個屬性
dsp.Write();
return false;
case 2: //序列化第2個屬性
dsp.Write();
return false;
case 3: //序列化最后一個屬性
dsp.Write();
}
}
return true;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -