VC6下SDI使用GDI+处理GIF图片时,第一次可以打开显示.打开之后若触发VIEW重绘就会报错:0x4aeff800 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突,但是打开BMP,JPG时就不会有问题,,,

解决方案 »

  1.   

    使用了NULL指针。
    出错时查看调用堆栈,找出引起错误的代码,看看哪个指针是NULL。
      

  2.   

     出错时调用堆栈的信息:
     GdiPlus.dll!4aeff800() 
     [下面的框架可能不正确和/或缺失,没有为 GdiPlus.dll 加载符号]
     GdiPlus.dll!4af39703()  指向:
     Status DrawImage(IN Image* image,
                         IN INT x,
                         IN INT y,
                         IN INT width,
                         IN INT height) {
            return SetStatus(DllExports::GdipDrawImageRectI(nativeGraphics,
                                                            image ? image->nativeImage
                                                                  : NULL,
                                                            x,
                                                            y,
                                                            width,
                                                            height));
        }
      

  3.   

    DrawImage(IN Image* image...
    你看看是不是IN Image* image这个参数为NULL了?
      

  4.   

    DrawImage的时候传递进去的指针问题.
      

  5.   

    为什么在处理BMP,JPG图片的时候又不会出现这个问题?
      

  6.   

    哪位高手解释下为什么相同代码在处理BMP,JPG图片的时候又不会出现这个问题?分还可以加..
      

  7.   

    下面为打开文件的代码:
    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
    _T("图片文件(*.jpg;*.jpeg;*.gif;*.bmp)|*.jpg;*.jpeg;*.gif;*.bmp|位图文件(*.BMP)|*.BMP|JPEG文件(*.JPG)|*.JPG|GIF文件(*.GIF)|*.GIF||"));
        if (IDOK==dlg.DoModal())
        {
    isfileopen=TRUE;
    count=0;
    num2++;
    biggernum=1.0;
    isPicBeDelete=FALSE;
    isPicBeRotate=FALSE;
    isPicBeBigOrSmall=FALSE;
    hasbemove=FALSE;//是否已经被移动
    hasbecut=FALSE;//是否已经被剪切
    hasberename=FALSE;//是否已经重命名
    CRect rect;
            GetClientRect(&rect);
            width=rect.Width();
            height=rect.Height();
            strPicPath.Format(_T("%s"),dlg.GetPathName());
    CFile::GetStatus(dlg.GetPathName(),filestatu);
    bitmap=new Bitmap(ToWChar((PSTR)(LPCSTR)strPicPath)); 
    widthtemp1=bitmap->GetWidth();
    heighttemp1=bitmap->GetHeight();
    CMainFrame* pmain24=(CMainFrame*)AfxGetMainWnd();
    pmain24->isstetch=FALSE;
    // Bitmap tmp(ToWChar((PSTR)(LPCSTR)strPicPath)); 
            //Bitmap* tmp =bitmap->clone(0,0,widthtemp,heighttemp,PixelFormatDontCare); //重新复制一份
    filename.Format(_T("%s"),dlg.GetFileName());
    // AfxMessageBox(filename);
    strPicFolder=strPicPath.Left(strPicPath.GetLength()-filename.GetLength());
    // if(strPicPath!="")
    // {isPicBeDelete=FALSE;}
            extname = dlg.GetFileExt();             //返回选定文件的扩展文件名
            extname.MakeLower();        //将后缀名变成小写的
            Invalidate();//通知重绘
        }
    }下面为OnDraw里面的代码:
    if(ispicture && !isPicBeDelete && !hasbemove && !hasbecut && !hasberename && !hasbecopy)//没有被删除.移动,剪切,重命名
    {
    //绘图到屏幕
    if(isfileopen)
    {
    widthtemp=widthtemp1*254/(GetDeviceCaps(pDC->m_hDC,LOGPIXELSX)*10);
    heighttemp=heighttemp1*254/(GetDeviceCaps(pDC->m_hDC,LOGPIXELSY)*10);
    }Rect rect(5.0f,5.0f,widthtemp,heighttemp);  //起始点
    graphics.ScaleTransform(biggernum,biggernum);graphics.DrawImage(bitmap,rect);
    }
    红色部分出错..
      

  8.   

    Microsoft GDI+库GIF文件解析内存破坏漏洞(MS08-052)换用其他GIF图像试试,或将GdiPlus.dll升级至最新。
      

  9.   

    就是这个问题...不过哪里可以下到最新的GdiPlus.dll?
      

  10.   

    http://www.microsoft.com/downloads/details.aspx?FamilyID=7F1CD013-2C4B-4582-9114-CB840A96124A&displaylang=zh-cn
      

  11.   

    和你的exe放在同一目录下就可以了,exe会先在自己的目录下找,没有才到PATH环境变量的路径里找
      

  12.   

    UP,我的GDI+开发包好像不用GDIPLUS.DLL,只要静态库,跟头文件就行,..问题还没解决,,
      

  13.   

    gdiplus没有静态库不用gdi+的话,可以用IPicture COM接口
      

  14.   

    我是用了GDI+,然后我把GDIPLUS.DLL从根目录下删除也不影响程序运行..
      

  15.   

    我的GDI+开发包里面有:一个#include文件夹,里面是gdi+函数的头文件,一个gdiplus.lib,还有一个是gdiplus.dll...现在把gdiplus.dll删除也不影响运行,还有就是gdiplus.dll已经用360修复了到底怎么回事?在处理GIF图片时就会有问题..怎样解决?
      

  16.   

    gdiplus.dll操作系统自带。开发包只是include 头文件和lib文件,并不需要单独提供gdiplus.dll。
    反过来说,如果在其他机器上是未打补丁,就还可能出错。
    方便的话就在同一目录下带上最新的gdiplus.dll吧。qq就是这么干的
      

  17.   

    system32下有gdiplus.dll,将其替换成最新的。
      

  18.   

    VC6下SDI使用GDI+处理GIF图片时,第一次可以打开显示.打开之后若触发VIEW重绘就会报错:0x4aeff800 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突,但是打开BMP,JPG时就不会有问题,,,