异常求助

lixinqing   2009-12-4 16:30 楼主

  1. ((CBitmapButton*)GetDlgItem(ctrId))->LoadBitmaps(resId,0,0,0);


以上代码反复执行几次就会出现以下异常。

First-chance exception in Ad.exe:0x80000002:Datatype Misalignment


我试过网上的方法但是还是不行,有网友说是指针不能瞎转。


以下是网上的解决办法:
Datatype misalignment竟然是ARM著名的一个问题.解释大致是ARM要求每个变量都需要4Bytes倍数对齐,VC缺省时8Byte对齐,ARM的编译器和x86的不太一样,不会取整,所以有小于32位的变量的话,后边的一个变量会被截断,最好的办法是32位。Project Settings -> C/C++ -> Code Generation 设置为struct member alignement 1.或者采用#prgma pack设置结构的对齐字节数。如下:

#pragma pack(1)
// Definition structure/classe align is 1 byte
#pragma pack()

回复评论 (2)

深奥,帮顶了,学习
点赞  2009-12-4 17:46
个人觉得你的代码是没有问题的
或者你这样写
CWnd *pWnd = GetDlgItem(ctrId);
if (pWnd->IsKindOf(RUNTIME_CLASS(CBitmapButton)))
{
    ((CBitmapButton*)GetDlgItem(ctrId))->LoadBitmaps(resId,0,0,0);
}
看看还会不会出错
点赞  2009-12-4 21:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复