• 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
jishiping 2002年04月02日
★ BCB6的严重BUG! 关于字节对齐问题 ★
在 BCB6 自带的头文件中,所有的字节对齐都不起作用,即
#include <pshpack1.h>
#include <pshpack2.h>
#include <pshpack4.h>
#include <pshpack8.h>
#include <poppack.h>
都没有效果。当然,并不是所有的结构定义都受影响。比如:
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType;
DWORD bfSize; //由于对齐布起作用,在这之前添加两个字节,使bfSize的地址对齐到4的倍数
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
在C++Builder6中大小是16,应该是14。

typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
由于这个结构不需要对齐指令,所以不受影响。
这意味着凡是你用到受影响的结构,你的程序就会有问题!!!

修改方法,将上面的五个文件(pshpack*.h, poppack.h)开头的
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
和结尾的
#pragma option pop /*P_O_Pop*/
去掉,就可以了。
...全文
453 点赞 收藏 19
写回复
19 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ Builder
创建于2007-08-02

2546

社区成员

10.2w+

社区内容

C++ Builder相关内容讨论区
社区公告
暂无公告