在dll中定义数据结构
typedef struct {
    char system_type[2];
    unsigned char new;
    unsigned long number;
    unsigned long points;
    unsigned long offset;
    unsigned long lsb;
    unsigned long msb;
    unsigned short msg_number;
    unsigned char band;
    unsigned char length;
    unsigned char reserve[2];
} dataobject;
sizeof (dataobject)应该是29,在Test GUI中令
int datalen;
datalen=sizeof(object);//datalen=29
接着调用dll中的导出函数:
int msglen;
msglen=msgdll_create_data_msg((unsigned char *)databuf);MSGDllxxport ssize_t msgdll_create_data_msg( unsigned char *msg)
{
    ssize_t msg_len;
    unsigned char *p;
    dataobject rawdata;
    p = msg ;
    memcpy(p,&rawdata,sizeof(dataobject)); 
//这里的sizeof(dataobject)=32,找不出原因????   
    msg_len += sizeof(dataobject);
    
    return msg_len;}
程序编译都没有问题,warning也都排除了,dll路径没有错,百思不得其解啊

解决方案 »

  1.   

    估计在 EXE 和 DLL 编译时采用了不同的 packing alignment,Test GUI 中是按单字节对齐,DLL 中按 4 字节对齐。一般在定义公用数据结构是最好定死 packing alignment,例如#pragma pack(push, 4)  // 按 4 字节对齐struct SOME_STRUCT 

        ... 
    };#pragma pack(pop)      // 恢复之前的对齐设置
      

  2.   

    #pragma pack(push ,1)
    struct YOURSTRCT
    {
    };
    ...
    #pragma pack(pop)
    另外在PROJECT- C++ CODE GENERATION - STRUCT MEMBER ALIGNMENT 中也可以修改。