typedef struct
{
DWORD dwStartCode;     // For one valid AvFrm, this always be AVFRM_START_CODE DWORD FrmType     :2;  // enVidFrmType
DWORD VidLen      :18; // Video data length, max 256k
DWORD AudLen      :12; // Audio data length, max 4k DWORD dwFrmNum;        // Frame Number : 1 ~ TRecFileHead::dwTotalFrmCnt
BYTE  Reserved[4];
}TFrmHead; // Total 16 bytes
在C++中可定义位段 DWORD FrmType     :2;  // enVidFrmType
DWORD VidLen      :18; // Video data length, max 256k
DWORD AudLen      :12; // Audio data length, max 4k那么这样的定义在DELPHI中怎么实现?

解决方案 »

  1.   

    DELPHI 没这种写法,只能用位偏移的方式
      

  2.   

    Delphi中没有与位域对应的定义方法,只能定义为32位整数后,用代码合成和分解
      

  3.   

    哦,具体怎么实现能写个例子么?
    我的想法是,
    DWORD FrmType :2; // enVidFrmType
    DWORD VidLen :18; // Video data length, max 256k
    DWORD AudLen :12; // Audio data length, max 4k
    在DELPHI中定义时
    定义成
    FrmType :integer; // enVidFrmType
    VidLen :integer; // Video data length, max 256k
    AudLen :integer; // Audio data length, max 4k
    只要最大值大过C++中定义的最大值,就不影响值的传递,这样可以么?不过这样的话sizeof(TFrmHead)就和C++里定义的尺寸不一样了,不知道有没有影响
      

  4.   

    FrmType和VidLen还有AudLen一共占32位,所以你在Delphi中用一个DWORD变量来代替这三个就可以了,这样结构大小才会一致。但是用到这个变量的时候,就需要分解了。