好象要用sizeof(struct TEST)吧。

解决方案 »

  1.   

    在project/setting下的 C/C++ 中的 project options 中加一个参数 /Zp1, 表示压缩单字节存储,要不然,系统为了存取方便会用整数字节存储,导致大小不对
      

  2.   

    对不起, 刚刚是对wwwunix([email protected])说的。TO egyptcaesar(笨小孩): 谢谢你, 但可以不可以请你说清楚一点, 有Compile Error
    C:\Temp\DosPro\Test1\driver.cpp(5) : warning C4653: compiler option 'structure packing (/Zp)' inconsistent with precompiled header; current command-line option ignored
      

  3.   

    DWORD的地址要从4的倍数开始分配,WORD和byte的地址要从2的倍数开始分配,且windows是32位的,空间分配按DWORD算,这样:
    struct TEST
    {    byte byType;//0-1
        WORD wDataLen;//2-3
        DWORD dwDataOfst;//4-7
    };
    struct TEST
    {
        byte byType;//0-1
        DWORD dwDataOfst;//4-7
        WORD wDataLen;//8-9,10-11free
    };
    表达得不好,不知满意否?
      

  4.   

    TO egyptcaesar(笨小孩)和Regen219(雨) :上述问题解决已经了, 待会儿一定给分的。。另一些问题 :
    1. 为什么加了那个Compile 参数就不能加breakpoint了?
    2. 哪些Compile参数需要特别的注意了?
    3. 对于dutsf(阿石)所说的那些原理不大清楚, 可以不可以补充一点了?继续加分。 
      

  5.   

    哈哈!bluekite(bluekite) 你又回来了啊!恭喜了!:) 我想111222 知道你回来了,肯定会..........................高兴的!
      

  6.   

    这是内存分配的问题,如果是DWORD对齐方式:
    BYTE 可以分配任何起始的地址
    WORD 只能分配偶数地址
    DWORD 只能分配4的倍数的地址
    QWORD 和 DWORD 一样,因为是DWORD对齐方式
    你规定的结构分配的顺序不能变
    struct TEST
    {
        byte byType;      //地址 0
        DWORD dwDataOfst; //地址 4
        WORD wDataLen;    //地址 8
    };下面的程序就是 BYTE 对齐的#pragma pack(push) //保存对齐状态
    #pragma pack(1) //1:BYTE 对齐, 2:WORD 对齐, 4:DWORD, 8:QWORD, 16:...struct TEST
    {
        byte byType;      //地址 0
        DWORD dwDataOfst; //地址 1 //此时允许任何地址
        WORD wDataLen;    //地址 5 //此时允许任何地址
    };#pragma pack(pop) //回复对齐状态
      

  7.   

    在setting-c++-code generation里設置對齊方式為1byte
      

  8.   

    TO konfyt(水果唐) :呵呵, 我终于回来了, 能再见到你们我也很高兴。。TO ybchen(): 我终于明白了, 谢谢
    但还有两个问题了, 请你们多多回答。 这里是不能再加分了, 如果有人回答了的话, 我会另开贴子来给分的。另一些问题 :
    1. 为什么加了那个Compile 参数就不能加breakpoint了?
    2. 哪些Compile参数需要特别的注意了?