首页
社区
课程
招聘
编译器的BUG?还是我对VC数据结构定义不了解?[求助]
发表于: 2007-4-18 23:18 6323

编译器的BUG?还是我对VC数据结构定义不了解?[求助]

2007-4-18 23:18
6323
一个简单的生成一个BMP文件的小程序

#define WORD unsigned short
#define DWORD unsigned long
#define LONG  long
#define BYTE  unsigned char

typedef struct tagBITMAPFILEHEADER {
    WORD bfType;
    DWORD bfSize;
    WORD bfReserved1;
    WORD bfReserved2;
    DWORD bfOffBits;
} BITMAPFILEHEADER;

bfType必须是文件的签名“BM”

紧接着的一个DWORD是大小

问题是,编译出来之后,相应的汇编代码是

00401056  |.  66:C705 A0CD4>mov     word ptr [42CDA0], 4D42
0040105F  |.  C705 A4CD4200>mov     dword ptr [42CDA4], 2BC36

虽然仍然按照WORD写入,但是编译器却预留了一个DWORD

结果导致生成的文件产生错误。

请问,如何修改该结构定义,才能使编译器编译成下面的汇编代码

mov     word ptr [ea], 4D42
mov     dword ptr [ea+2], 2BC36

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1238
活跃值: (808)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
MS已4字节的。强行对齐下就可以了。
#pragma pack(1)
2007-4-18 23:38
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
#pragma pack(1) //强行指定这个数据结构按1字节对齐

typedef struct tagBITMAPFILEHEADER {
    WORD bfType;
    DWORD bfSize;
    WORD bfReserved1;
    WORD bfReserved2;
    DWORD bfOffBits;
} BITMAPFILEHEADER;

#pragma pack() //恢复原来对齐方式以免影响其他数据结构
2007-4-19 12:51
0
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
为什么不用Ms自己的数据结构呢?

看看wingdi.h里面是怎么写的就知道拉:)
2007-4-19 13:08
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
5
thx几位大牛
2007-4-19 13:59
0
游客
登录 | 注册 方可回帖
返回
//