PCI1710.exe 中的 0x0041f5b5 处未处理的错误: 0xC0000005: 写入位置 0x00000000 时各位大大 帮小弟我看看这块要如何弄

PCI1710.exe 中的 0x0041f5b5 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时各位大大 帮我看看这块要怎么弄
void CPCI1710_MonitoringMenu::OnBnClickedPSaveButton1()
{

CDC MemDC;//
CString strpath;
//CSettingApp *app=(CSettingApp *)AfxGetApp();

MemDC.CreateCompatibleDC(NULL);
//strpath.Format( _T( "%s\\1206.bmp" ), app->BtcaPatha);
HBITMAP hBitmap=(HBITMAP)LoadImage( NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);  
MemDC.SelectObject(hBitmap);
MemDC.TextOut(20,20,"1.bmp");
WORD wbitsCount;
DWORD dwpalettelsize=0;
DWORD dwbmdibitsize,dwdibsize,dwwritten;
BITMAP bitmap;
BITMAPFILEHEADER bmfhdr;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
HANDLE fh,fdib;
GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);
wbitsCount=bitmap.bmBitsPixel;
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bitmap.bmWidth;
bi.biHeight=bitmap.bmHeight;
bi.biPlanes=1;
bi.biBitCount= bitmap.bmBitsPixel ;
bi.biClrImportant=0;
bi.biClrUsed=0;
bi.biCompression=BI_RGB;
bi.biSizeImage=0;
bi.biYPelsPerMeter=0;
bi.biXPelsPerMeter=0;
if(wbitsCount<=8)dwpalettelsize=(1<<wbitsCount)*sizeof(RGBQUAD);
dwbmdibitsize=((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
  fdib=GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
  lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
*lpbi=bi;//将bi中的数据写入分配的内存中。
  HDC hdc=::GetDC(NULL);
  GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
  fh=CreateFile("1.bmp",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
  if(fh==INVALID_HANDLE_VALUE)
  return ;
  bmfhdr.bfType=0x4d42;
  dwdibsize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;
  bmfhdr.bfSize=dwdibsize;
  bmfhdr.bfReserved1=0;
  bmfhdr.bfReserved2=0;
bmfhdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;
WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
::GlobalUnlock(fdib);
::GlobalFree(fdib);
::CloseHandle(fh);
return ;

}
红字地方出现的错误 希望各位大大给予帮助 谢谢

------解决方案--------------------
设断点,调试,查看变量的值
------解决方案--------------------
memcpy等来复制数据
------解决方案--------------------
试试
memcpy(lpbi,&bi,sizeof(bi));