📄 dsp_sdk_.txt
字号:
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;
}
类型:protected虚函数,派生类对象必需重载该函数
定义:virtual bool UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
参数:byClassLevels -- 类的深度
byAttrNo -- 当前操作的属性的序号
dsp -- 进行序列化操作的_DSPPACKET结构
返回:true --表示当前对象的属性已经全部还原完,该属性是对象的最后一个属性
false --表示当前对象的属性还没有全部还原完
描述:与Serialize()方法中的属性相对应,定义了对象中的哪些属性进行反序列化操作,这个方法在对象反序列化时会自动调用
举例:
bool DSPACT::UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
{
//反序列化对象
if(byClassLevels>1)
return BaseObject::UnSerialize(byClassLevels-1,byAttrNo,dsp,dwLen);
else
{
switch(byAttrNo)
{
//属性的序号必需与Serialize()中的序号相对应
case 1: //得到第1个属性
if(dsp.Read(,dwLen))
{
//如果反序列化属性的函数返回真,则表示该属性的值已填充完成
}
return false;
case 2: //得到第2个属性
dsp.Read();
return false;
case 3: //得到最后一个属性
dsp.Read(,dwLen);
}
}
return true;
}
类型:protected虚函数,派生类对象必需重载该函数
定义:virtual bool Compress(char** const lpBuff,DWORD* pdwLen)
参数:lpBuff -- 在调用时,指向要压缩的数据缓冲区的指针,压缩后指向压缩数据的缓冲区的首址
pdwLen -- 在调用时,为要压缩的数据的字节个数,压缩后为压缩后的数据的字节数
返回:true --压缩程序有效;
false --压缩程序无效;
当压缩有效时,必需修改lpBuff为保存压缩后数据的缓冲区的指针,pdwLen地址内保存为压缩后的数据的长度
类型:protected虚函数,派生类对象必需重载该函数
定义:virtual bool UnCompress(char** const lpBuff,DWORD dwLen,char* lpUnBuff,WORD& wUnLen,bool bStart)
参数:lpBuff -- bStart==false时,需要将接收被压缩的数据缓冲区的首址保存在该地址中;
bStart==true时,保存被压缩的数据缓冲区的首址
dwLen -- 被压缩数据的缓冲区的长度
lpUnBuff -- bStart==true时,接收解压缩数据的缓冲区的首址
dwUnLen -- bStart==true时,接收解压缩数据的缓冲区的长度,在解压缩完成后,保存为解压缩数据的长度
bStart -- true,表示可以开始进行解压缩数据;
false,表示该次调用只是指定填充数据的缓冲区,缓冲区的长度不能小于dwLen;
返回:true --解压缩程序有效;
false --解压缩程序无效
如果设定缓冲区为NULL,则表示解压缩程序失败。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -