내 프로세스의 GDI 개체 수를 작업 관리자에서 보면 GDI 개체의 DeleteObject() 함수 호출이이 숫자를 감소시키지 않는 것을 볼 수 있습니다. 함수 호출은 FALSE를 반환하지 않습니다 (객체 삭제가 실패한 경우와 같아야 함). 필자는 MFC와 같은 추가 라이브러리 및 래퍼없이 일반 Windows API GDI 함수를 사용하고 있습니다. 왜 이러한 상황이 발생할 수 있으며 GDI 리소스 유출을 의미합니까? '이전'GDI 개체를 삭제해도 숫자가 줄어들지 않습니다
void gditest()
{
HBRUSH h = CreateSolidBrush(RGB(255, 237, 5));
HRGN rgn = CreateRectRgn(0, 100, 100, 0);
FillRgn(g_DC, rgn, h);
int before = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
int rs = DeleteObject(h);
if (!rs)
throw;
int after = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
}
변수와 동일한 '후'다음
문제를 재현하는 방법 코드입니다. g_DC는 기본 창의 HDC입니다.
SSCCE를 제공하십시오 –
표준 실수는 여전히 장치 컨텍스트에서 선택한 개체가 있습니다. 그리고 네, 그건 누수입니다. –
이 경우 DeleteObject()가 0을 반환하면 안됩니까? DeleteObject에 대한 MSDN : "지정한 핸들이 유효하지 않거나 현재 DC로 선택되어있는 경우 반환 값은 0입니다." –