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));
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));