不管我看起来多么努力,无论尝试了什么,我都找不到为什么这段代码泄漏了。实际上,我不确定泄漏,但是每次使用这段代码时,GDI对象的数量都会增加。
HBITMAP hBmp;
hBmp = CreateDIBitmap(dc, &stBmpIH, CBM_INIT, m_pBitmapData, m_pBitmapInfo, DIB_RGB_COLORS) ;
Bitmap *pBMP = NULL;
HPALETTE hPal = NULL;
Color col = 0;
pBMP = Bitmap::FromHBITMAP(hBmp, hPal);
if (m_bFlip)
{
pBMP->RotateFlip( Rotate90FlipXY );
pBMP->GetHBITMAP(col,&hBmp);
m_bFlip = FALSE;
}
else
{
pBMP->RotateFlip( RotateNoneFlipX );
pBMP->GetHBITMAP(col,&hBmp);
}
delete pBMP;
我已经用一种工具检查了GDI对象,发现的是HBITMAP hBmp是一个正在泄漏的对象。我应该如何删除它?
DeleteObject不起作用。
谢谢
最佳答案
DeleteObject不起作用。
让我们假设即使代码段中没有显示它,它实际上也存在于您的代码中。那么下一个解释就是这个语句:
pBMP->GetHBITMAP(col,&hBmp);
它将覆盖hBmp的值,从而阻止您正确释放它。固定:
HBITMAP prev = hBmp;
Status status = pBMP->GetHBITMAP(col,&hBmp);
if (status == Ok) DeleteObject(prev);
您可能需要在错误处理代码上做更多的工作。