找到问题了。time_t在VC6.0下面是4个字节。在VC2008下面是8个字节,怎么解决这个问题!!

解决方案 »

  1.   

    #pragma pack#pragma pack(push, 4)
    typedef struct _tagMyStruct_t
    {
      char A;
      short B;
      long C;
      ……
    }MYSTRUCT;
    #pragma pack(pop)
      

  2.   

    http://blog.csdn.net/worldy/article/details/23331223
      

  3.   

    In Visual C++ 2005, time is a wrapper for _time64 and time_t is, by default, equivalent to __time64_t. If you need to force the compiler to interpret time_t as the old 32-bit time_t, you can define _USE_32BIT_TIME_T. This is not recommended because your application may fail after January 18, 2038; the use of this macro is not allowed on 64-bit platforms.
      

  4.   

    typedef struct tagSTKDATA
    {
    time_t m_time; //时间,UCT
    float m_fOpen; //开盘
    float m_fHigh; //最高
    float m_fLow; //最低
    float m_fClose; //收盘
    float m_fVolume; //成交量
    float m_fAmount; //成交额
    WORD m_wAdvance; //上涨家数(仅大盘有效)
    WORD m_wDecline; //下跌家数(仅大盘有效)
    } STKDATA;
    就是这个结构体。按照你说的,在我的测试exe里sizeof了是32个字节。但是在dll里还是40个字节?请问怎么办呢。。
      

  5.   

    http://msdn.microsoft.com/zh-cn/library/xh3e3fd0(v=vs.90).aspx
    你换成4字节对齐就可以了。文章中提到了怎么在VS中设置。
      

  6.   

    typedef struct tagSTKDATA
    {
    time_t m_time; //时间,UCT
    float m_fOpen; //开盘
    float m_fHigh; //最高
    float m_fLow; //最低
    float m_fClose; //收盘
    float m_fVolume; //成交量
    float m_fAmount; //成交额
    WORD m_wAdvance; //上涨家数(仅大盘有效)
    WORD m_wDecline; //下跌家数(仅大盘有效)
    } STKDATA;
    就是这个结构体。按照你说的,在我的测试exe里sizeof了是32个字节。但是在dll里还是40个字节?请问怎么办呢。。
    你的dll是2008写的么?
    得设置这个宏重新编译下
      

  7.   

    两边都同时设置按字节对齐#pragma pack(push, 1)
    typedef struct tagSTKDATA
    {
    time_t m_time; //时间,UCT
    float m_fOpen; //开盘
    float m_fHigh; //最高
    float m_fLow; //最低
    float m_fClose; //收盘
    float m_fVolume; //成交量
    float m_fAmount; //成交额
    WORD m_wAdvance; //上涨家数(仅大盘有效)
    WORD m_wDecline; //下跌家数(仅大盘有效)
    } STKDATA;
    #pragma pack(pop)