Win32 API资源分配释放速查

来源:互联网 发布:php soap 传json 编辑:程序博客网 时间:2024/04/30 04:04

                      

  下面为某次浏览找到的Win32资源的分配清除文档,只简单的翻译了几个文字。该
文档对防止资源泄露有很大帮助。
================================================================================
资源            分配函数                      清除函数             需要手动清除?
================================================================================

Accelerators    LoadAccelerators              N/A                  No

Atoms           GlobalAddAtom                 GlobalFreeAtom       Yes

Bitmaps         CreateBitmap                  DeleteObject         Yes *
                CreateBitmapIndirect          DeleteObject         Yes *
                CreateCompatibleBitmap        DeleteObject         Yes *
                CreateDIBitmap                DeleteObject         Yes *
                CreateDiscardableBitmap       DeleteObject         Yes *
                LoadBitmap                    DeleteObject         Yes *

Brushes         CreateBrushIndirect           DeleteObject         Yes
                CreateDIBPatternBrush         DeleteObject         Yes
                CreateHatchBrush              DeleteObject         Yes
                CreatePatternBrush            DeleteObject         Yes
                CreateSolidBrush              DeleteObject         Yes

Carets          CreateCaret                   DestroyCaret         No  #

Clipboard       OpenClipboard                 CloseClipboard       Yes

Comms Ports     OpenComm                      CloseComm            Yes

Cursor          CreateCursor                  DestroyCursor        Yes
                LoadCursor                       N/A               No

DC              CreateDC                      DeleteDC             Yes
                CreateCompatibleDC            DeleteDC             Yes @
                GetDC                         ReleaseDC            Yes
                GetWindowDC                   ReleaseDC            Yes
                BeginPaint                    EndPaint             Yes

Dialog Box      CreateDialog                  DestroyWindow        No
                CreateDialogIndirect          DestroyWindow        No
                CreateDialogIndirectParam     DestroyWindow        No
                CreateDialogParam             DestroyWindow        No
File            OpenFile                      _lclose              No

Fonts           CreateFont                    DeleteObject         Yes
                CreateFontIndirect            DeleteObject         Yes
                AddFontResource               RemoveFontResource   Yes

GDI Stock Obj   GetStockObject                N/A                  No  &

Hook            SetWindowsHook                UnhookWindowsHook    Yes

IC              CreateIC                      DeleteDC             Yes

Icon            CreateIcon                    DestroyIcon          Yes
                LoadIcon                         N/A               No

Library         LoadLibrary                   FreeLibrary          Yes

Memory          AllocDStoCSAlias              FreeSelector         Yes
                AllocSelector                 FreeSelector         Yes
                GlobalAlloc                   GlobalFree           No
                GlobalDOSAlloc                GlobalDOSFr          No
                GlobalFix                     GlobalUnfix          No
                GlobalLock                    GlobalUnlock         No
                GlobalPageLock                GlobalPageUnlock     No
                GlobalRealloc                 GlobalFree           No
                GlobalWire                    GlobalUnwire         No
                LocalAlloc                    LocalFree            No
                LocalLock                     LocalUnlock          No
                LocalRealloc                  LocalFree            No

Menu            CreateMenu                    DestroyMenu          No  %
                CreatePopupMenu               DestroyMenu          No  %
                LoadMenu                      DestroyMenu          No  %
                LoadMenuIndirect              DestroyMenu          No  %
                GetSystemMenu                 N/A                  No

MetaFile        CreateMetaFile                DeleteMetaFile       Yes

Palette         CreatePalette                 DeleteObject         Yes

Pen             CreatePen                     DeleteObject         Yes
                CreatePenIndirect             DeleteObject         Yes

Regions         CreateEllipticRgn             DeleteObject         Yes
                CreateEllipticRgnIndirect     DeleteObject         Yes
                CreatePolygonRgn              DeleteObject         Yes
                CreatePolyPolygonRgn          DeleteObject         Yes
                CreateRectRgn                 DeleteObject         Yes
                CreateRectRgnIndirect         DeleteObject         Yes
                CreateRoundRectRgn            DeleteObject         Yes

Resource        AllocResource                 FreeResource         No
                FindResource                  N/A                  No
                LoadResource                  FreeResource         No
                LockResource                  UnlockResource       No

 

Sound           OpenSound                     CloseSound           Yes

String          LoadString                    N/A                  No

Thunk           MakeProcInstance              FreeProcInstance     No

Timer           SetTimer                      KillTimer            No

Window          CreateWindow                  DestroyWindow        No
                CreateWindowEx                DestroyWindow        No

================================================================================
Notes:
*   位图资源在释放的时候必须从选中它的DC中脱离。
%   当菜单失去焦点和窗口不再关联或者应用程序结束的时候占用资源必须被释放。
@   DC被释放前必须和它关联(选中)的位图取消联系
#   如果脱字符指定了位图,位图必须被释放
&   对DeleteObject的调用不会销毁常规的StockObject(系统内定资源)
================================================================================