样例函数:
/*************************************************************************
*
* 函数名称:
* FindDIBBits()
*
* 参数:
* LPSTR lpbi - 指向DIB对象的指针
*
* 返回值:
* LPSTR - 指向DIB图像象素起始位置
*
* 说明:
* 该函数计算DIB中图像象素的起始位置,并返回指向它的指针。
*
************************************************************************/
LPSTR WINAPI FindDIBBits(LPSTR lpbi)
{
return (lpbi + *(LPDWORD)lpbi + ::PaletteSize(lpbi));
}
分析:
(LP@@@@) var ,是指针类型的转换,指向结构的第一个字节处,但还要看是什么类型的指针,如果是LPDWORD,就是DWORD型的,加上*后就得到结构的第一个DWORD值,如果是LPWORD那么加上*后得到的就是DWORD的一半内容!如果是LPSTR那么得到的就是结构的第一个字节的内容。
此例中因为:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
第一个成员是DWORD类型的,(LPDOWRD)lpBI是指向类型为DWORD的指针,也就是指着biSize,那么加上*之后自然也就是biSize的值了,此处biSize是指该结构的大小,为40个字节