BUG: EMF Playback into DC Causes Memory Leak in GDI (156696)
The information in this article applies to:
- Microsoft Platform Software Development Kit (SDK) 1.0, when used with:
- the operating system: Microsoft Windows 95
- the operating system: Microsoft Windows 98
This article was previously published under Q156696 SYMPTOMS
In Windows 95 and Windows 98, when calling PlayEnhMetaFile() with a non-NULL clipping
region selected into the DC, GDI fails to free a copy of the clipping
region it creates, thereby causing a memory leak. This leaked resource is a
system resource and will not be freed when the application exits.
CAUSE
When RestoreDC() is called, it copies the hMetaRgn value in the saved block
over the hMetaRgn value in the hDC. If the value in the save block is NULL
and the value in the hDC is not, the only reference to that region is lost
and the region is not freed. Instead, RestoreDC() should check for the
above case and free the region.
When PlayEnhMetaFile() is called, it calls the following functions:
SaveDC(), SetMetaRgn(), play EMF records, and RestoreDC(). This creates the
hMetaRgn if there is a clipping region in the hDC, and then fails to
release it.
RESOLUTION
To work around this problem, render the Enhanced Metafile (EMF) unclipped
to a bitmap, and BitBlt() the image to the screen.
STATUS
Microsoft has confirmed this to be a problem in the Microsoft products
listed at the beginning of this article.
Modification Type: | Minor | Last Reviewed: | 9/23/2005 |
---|
Keywords: | kbHotfixServer kbQFE KB156696 |
---|
|