3

您好,我有以下函数,之后我从 c# 中使用它来显示带有“Bitmap.FromHbitmap(IntPtr)”的位图,但经过几次使用后,这会以内存泄漏告终。

IntPtr GetFrame(int Width,int Height,int nFrame)
    {
        width= Width;
        height = Height;
        HBITMAP hb;
        m_piHelper->GetBmp(width,height,nFrame,&hb);    
        return IntPtr(hb);
    }

可能我应该在某些地方删除对象,但我不知道在哪里我可以在返回之前尝试过,但我最终没有图像但出现 gdi 错误

谢谢,

4

1 回答 1

4

我假设您使用的是 C#。

您可以使用DeleteObject删除此 HBITMAP。

像这样声明它:

using System.Runtime.InteropServices class API { [DllImport("WINGDI32.dll")] public static extern int DeleteObject(IntPtr hObject); }

并删除对象:

API.DeleteObject(hBitmap);

由于您的函数返回指向 HBITMAP 的指针,因此您不能在返回之前将其删除。相反,您应该在以后不再使用该位图时将其删除。

于 2013-06-05T16:23:39.330 回答