首页 新闻 会员 周边 捐助

MFC项目GDI+相关bug

0
[待解决问题]

新接手的项目在DEBUG时,在利用Istream生成Image对象出错,如果打开项目什么都不做又会报GdiplusShutdown(m_pGdiToken);中断的错误。所以现在找到的断点位置都是库函数内部,但是在其他项目里也是调用相同方法,没有问题。
bool image::load(char *szfile)
{
bool bret = false;
LPBYTE lp = NULL;
int size = basic::get_file(szfile, (PBYTE *)&lp);
if (size != 0 && lp != NULL)
{
bret = load(lp, size);
basic::get_file_free((PBYTE *)&lp);
m_hbitmap = (HBITMAP)LoadImage(NULL, szfile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
}
return bret;
}
bool image::load(LPBYTE lp, DWORD dw)
{
bool bret = false;
void *pbuffer = NULL;
if (lp == NULL || dw == 0)
return bret;
release();
copy(lp, dw);
m_hbuffer = ::GlobalAlloc(GMEM_FIXED, dw);
if (NULL == m_hbuffer)
goto end;
pbuffer = ::GlobalLock(m_hbuffer);
if (pbuffer)
{
CopyMemory(pbuffer, m_lp, m_size);
if (::CreateStreamOnHGlobal(m_hbuffer, FALSE, &m_pstream) == S_OK)
{
//-----------------此处触发中断,点击继续后正常运行,下次运行到这里不会触发中断--------//
m_image = Bitmap::FromStream(m_pstream);
//-------------------------------------------------------------------------------------------------------------------//
//m_pstream->Release();
if (m_image)
bret = true;
}
::GlobalUnlock(m_hbuffer);
}
//::GlobalFree(m_hbuffer);
end:
return bret;
}

当程序运行后什么都不做直接退出,会在GdiplusShutdown(m_pGdiToken);出报错。
以上断点都是在debug调试状态下触发,直接运行exe没有问题,分析可能是指针越界或者使用空指针,可是断点都在相应的库函数里,GDI+库里。

快乐de小跳蛙的主页 快乐de小跳蛙 | 菜鸟二级 | 园豆:202
提问于:2021-06-08 10:27
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册