Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi: A breakpoint has been reached. occurred in the application at location trong VC++

    Tôi đang dùng visual C++ xây dựng ứng dụng SDI: đọc ảnh bitmap từ file *.hex cho trước rồi hiển thị ảnh lên vùng client của ứng dụng, khi tôi compile thì hoàn toàn không có vấn đề gì nhưng khi run thì lại báo lỗi:"Debug assertion failed!" tôi nhấn Retry rồi sau đó nhấn Debug thì được thông báo lỗi như sau:
    The exception breakpoint
    A breakpoint has been reached
    (0x80000003) occurred in the application at location 0x5f44070e

    Đây là đoạn code trong hàm ondraw() của tui:


    Mã:
    void CDemoBitmapView::OnDraw(CDC* pDC){    CDemoBitmapDoc* pDoc = GetDocument();    ASSERT_VALID(pDoc);    // TODO: add draw code for native data here    HDC hdc=pDC->Detach();     int FHandle;    BITMAPFILEHEADER bmpfh;    HANDLE hBmp, hBuff;    BITMAPINFO *BmpInfo;    unsigned char *Buff;    int Count,NumColor;    long n, BytesPerLine;    unsigned long width,height,numByte;    char *hexName="SaveFile.hex";        FILE *fr;    //Lay kich thuoc, chieu rong va chieu cao cua anh Bitmap    if ((fr=fopen(hexName,"rb"))==NULL)        exit(1);    fread(&width,4,1,fr);    fread(&height,4,1,fr);    numByte=0;    unsigned char temp;    while (!feof(fr))    {        fread(&temp,1,1,fr);        numByte++;    }    fclose(fr);    Count=0;    SetCursor(LoadCursor(NULL, IDC_WAIT));    // Mo file bitmap de doc    if ((FHandle=open(hexName, O_BINARY|O_RDONLY))==-1)         exit(1);    //Doc thong tin cho phan Header    bmpfh.bfType=19778;    bmpfh.bfSize=54+numByte;    bmpfh.bfReserved1=0;    bmpfh.bfReserved2=0;    bmpfh.bfOffBits=54;    // Ðoc header file bitmap    hBmp=GlobalAlloc(LMEM_MOVEABLE,         bmpfh.bfOffBits-sizeof(BITMAPFILEHEADER));    BmpInfo=(BITMAPINFO*)GlobalLock(hBmp);    //doc thong tin cho phan Header Info    BmpInfo->bmiHeader.biSize=40;    BmpInfo->bmiHeader.biWidth=width;    BmpInfo->bmiHeader.biHeight=height;    BmpInfo->bmiHeader.biPlanes=1;    BmpInfo->bmiHeader.biBitCount=1;    BmpInfo->bmiHeader.biCompression=BI_RGB;    BmpInfo->bmiHeader.biSizeImage=numByte;    BmpInfo->bmiHeader.biXPelsPerMeter=0;    BmpInfo->bmiHeader.biYPelsPerMeter=0;    BmpInfo->bmiHeader.biClrUsed=0;    BmpInfo->bmiHeader.biClrImportant=0;    BmpInfo->bmiColors[0].rgbBlue=255;    BmpInfo->bmiColors[0].rgbGreen=255;    BmpInfo->bmiColors[0].rgbRed=255;    BmpInfo->bmiColors[1].rgbBlue=0;    BmpInfo->bmiColors[1].rgbGreen=0;    BmpInfo->bmiColors[1].rgbRed=0;    // Ðoc phan bitmap info và palette màu    if (BmpInfo->bmiHeader.biCompression != BI_RGB)         exit(1);    // Xác dinh so màu cua palette    NumColor=(int)pow(2,BmpInfo->bmiHeader.biBitCount);    if(NumColor>256)         exit(1);    // Xác dinh so byte cho 1 scanline    BytesPerLine=(bmpfh.bfSize-bmpfh.bfOffBits)/BmpInfo->bmiHeader.biHeight;    /* Cap nhat thông tin kích thuoc anh trên BITMAPINFO (hien tai = 0 neu anh không nén) */    BmpInfo->bmiHeader.biSizeImage=bmpfh.bfSize-bmpfh.bfOffBits;    // Ðoc noi dung file bitmap    hBuff=GlobalAlloc(GMEM_MOVEABLE, BmpInfo->bmiHeader.biSizeImage);    Buff=(unsigned char *)GlobalLock(hBuff);    if (!Buff)         exit(1);    //Doc bo 8 byte dau cua hexName.hex    unsigned long stemp;    read(FHandle,&stemp,4);    read(FHandle,&stemp,4);    // Ðoc tung dòng trên file    do    {        n=read(FHandle,Buff,BytesPerLine);        Buff+=n;        Count++;    }while (Count<BmpInfo->bmiHeader.biHeight);    close(FHandle);    GlobalUnlock(hBuff);    GlobalUnlock(hBmp);    SetCursor(LoadCursor(NULL, IDC_ARROW));/*-----------------Tao palette màu cho anh Bitmap---------------------*/    HANDLE hMemPal;    LOGPALETTE far *logPal;    HPALETTE hPal;    int i;    hMemPal=GlobalAlloc(LMEM_MOVEABLE,         sizeof(LOGPALETTE)+NumColor*sizeof(PALETTEENTRY));    logPal=(LOGPALETTE far *)GlobalLock(hMemPal);    // So muc trong Palette    logPal->palNumEntries=NumColor;    logPal->palVersion=0x300;    //Gán các giá tri màu RGB cho nhung Entry trong Palette    for (i=0;i<NumColor;i++) //Error here    {        logPal->palPalEntry[i].peRed=BmpInfo->bmiColors[i].rgbRed;        logPal->palPalEntry[i].peGreen=BmpInfo->bmiColors[i].rgbGreen;        logPal->palPalEntry[i].peBlue =BmpInfo->bmiColors[i].rgbBlue;        logPal->palPalEntry[i].peFlags = PC_RESERVED;    }    // Tao handle cho Palette    hPal=CreatePalette(logPal);    GlobalUnlock(hMemPal);    GlobalFree(hMemPal);    if (!hPal)         exit(1);/*------------------------Tao handle bmp file ------------------------------*/    SetCursor(LoadCursor(NULL, IDC_WAIT));    // Nap palette vào hdc    SelectPalette(hdc,hPal,FALSE);          RealizePalette(hdc);    BmpInfo=(BITMAPINFO *)LocalLock(hBmp);    Buff=(unsigned char *)GlobalLock(hBuff);    //Tao bitmap    hBmp=CreateDIBitmap(hdc,(BITMAPINFOHEADER *)BmpInfo,         CBM_INIT, Buff, (BITMAPINFO *)BmpInfo,DIB_RGB_COLORS);    GlobalUnlock(hBuff);    GlobalUnlock(hBmp);    GlobalFree(hBuff);    GlobalFree(hBmp);    SetCursor(LoadCursor(NULL, IDC_ARROW));    if(!hBmp)         exit(1);/*-----------------------Hien thi bitmap lên cua so---------------------------*/        HDC hMemDC;    HANDLE OldBmp;    // Tao MDC    hMemDC=CreateCompatibleDC(hdc);    SelectPalette(hMemDC, hPal, FALSE);         // Tro ve palette he thong    UnrealizeObject(hPal);          // Nap lai palette    RealizePalette(hdc);    SelectPalette(hMemDC, hPal, FALSE);    // Liên ket hMemDC voi anh bitmap    OldBmp=SelectObject(hMemDC, hBmp);    // Copy bitmap lên window    BitBlt(hdc,1, 1, width, height, hMemDC, 0, 0,SRCCOPY);    // Huy MDC        SelectObject(hMemDC,OldBmp);    DeleteDC(hMemDC);}
    Các bác xem giúp tôi lỗi đó là lỗi gì được không ạ!
    Cảm ơn các bác nhiều!!!

    file SaveFile.hex là một file trong đó 4 byte đầu tin giữ thông tin về chiều rộng ảnh bitmap, 4 byte tiếp theo là chiều chiều dài, những byte còn lại là nội dung của ảnh bitmap.
    Muốn upload SaveFile.hex lên cho các bác xem nhưng ko biết upload thế nào vì nó ko giống như word,.... ko cho phep copy, gửi cả file thì được.
    Hic hic hic...

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tớ đang code 1 project MFC đơn giản gồm 2 project con:
    + DLL: DLL này không có export hàm nào cả, đơn giản chỉ là đăng ký 1 class với HĐH cho điều khiển là button.
    + Sau đó, chương trình sẽ gọi DLL này. Tớ viết thẳng đoạn code nạp DLL trong hàm khởi tạo của MFC Application.

    Tớ compile DLL thì ngon lành, còn khi compile cái MFC Application thì báo lỗi Debug Assertion Failed. Nó báo lỗi hàm Assert hay sao ý. Tớ không biết sữa lỗi này làm sao, meoconlongvang xem hộ tớ.


    Thanks!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •