首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

一个C++的结构定义转换成Delphi代码

2012-02-14 
一个C++的结构定义转换成Delphi代码求助typedefstructtag_CHTAVDATA{DWORDdwSize//ThebuffersizeDWORDdwD

一个C++的结构定义转换成Delphi代码求助
typedef   struct   tag_CHTAVDATA
{
DWORDdwSize;//The   buffer   size
DWORDdwDataSize;//The   total   data   size
union
{
DWORDdwFrameIndex;
DWORDdwFaceNum;
};
union
{
DWORDdwFlag;
struct
{
DWORDwFrameType:8;
DWORDwReserved:8;
DWORDbVideoLost:1;
DWORDbMaskAlarm:1;
DWORDbIOAlarm:1;
DWORDbAuxData:1;
DWORDbVCodec:4;//Video   Codec   Type
DWORDbACodec:4;//Audio   Codec   Type
DWORDbReserved:1;
DWORDbAlarmProcessing:1;
DWORDbRT:1;
DWORDbAudio:1;
};
};
DWORDdwTimeStamp;
DWORDdwVideoLen;//Video   length
DWORDdwAudioLen;//Audio   length
DWORDdwAuxData;//Aux   data
BYTEbAVData[1];//AV   data
}CHTAVDATA,   *PCHTAVDATA;

[解决办法]
union
{
DWORDdwFrameIndex;
DWORDdwFaceNum;
};
这里是两个相同类型变量用相同空间,没必要如此定义,可以通过定义两个结构,然后强制转换这里.

union
{
DWORDdwFlag;
struct
{
DWORDwFrameType:8;
DWORDwReserved:8;
DWORDbVideoLost:1;
DWORDbMaskAlarm:1;
DWORDbIOAlarm:1;
DWORDbAuxData:1;
DWORDbVCodec:4;//Video Codec Type
DWORDbACodec:4;//Audio Codec Type
DWORDbReserved:1;
DWORDbAlarmProcessing:1;
DWORDbRT:1;
DWORDbAudio:1;
};
};
这里,dwFlag和后面的结构中wFrameType占用同一个空间,也是相同类型,意义不大.

完全可以通过多个结构定义去模仿这个结构类型,相互之间强制转换就可以.比如第二个union完全可以如下定义,ttype1 和ttype12可以强制转换,只是XXX 不需要使用而已.

type
ttype1 = record
dwFlag: Dword;
xxx: array[0..10] of DWord;
end;
ttype2 = record
wFrameType: DWORD;
wReserved: DWORD;
bVideoLost: DWORD;
bMaskAlarm: DWORD;
bIOAlarm: DWORD;
bAuxData: DWORD;
bVCodec: DWORD; //Video Codec Type
bACodec: DWORD; //Audio Codec Type
bReserved: DWORD;
bAlarmProcessing: DWORD;
bRT: DWORD;
bAudio: DWORD;
end;

热点排行