函式介紹
方法名稱:CloseHandle
位置:Kernel32.dll
BOOL CloseHandle(
HANDLE hObject
);
參數
hObject :代表一個已打開對象handle。
返回值
TRUE:執行成功;
FALSE:執行失敗,可以調用GetLastError()獲知失敗原因。
函式說明
關閉一個核心對象。其中包括檔案、檔案映射、進程、執行緒、安全和同步對象等。在CreateThread成功之後會返回一個hThread的handle,且核心對象的計數加1,CloseHandle之後,引用計數減1,當變為0時,系統刪除核心對象。
若線上程執行完之後,沒有調用CloseHandle,在進程執行期間,將會造成
核心對象的泄露,相當於
句柄泄露,但不同於
記憶體泄露,這勢必會對系統的效率帶來一定程度上的負面影響。但當進程結束退出後,系統會自動清理這些資源。
相關問題
返回值
Long,非零表示成功,零表示失敗。會設定GetLastError
參數表
參數 類型及說明
hObject Long,欲關閉的一個對象的句柄
註解
除非對核心對象的所有引用都已關閉,否則該對象不會實際刪除
示例
從一個檔案中讀取DDB數據然後用進行轉換
HBITMAP LoadBitmapEx(LPCTSTR lpszFile){if(lpszFile == NULL)return NULL;HBITMAP hBitmap;HANDLE hf;BITMAPFILEHEADER* pbmfh;DWORD dwBytesRead, dwFileSize, dwFileSizeHigh;BOOL bSuccess;// 打開一個bmp檔案hf = CreateFile(lpszFile, GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);if( hf == INVALID_HANDLE_VALUE){TRACE("Open file filed with error %d ", GetLastError());return NULL;}// 得到這個檔案大小dwFileSize = GetFileSize(hf, &dwFileSizeHigh);if( dwFileSizeHigh ){CloseHandle(hf);return NULL;}// 分配記憶體,大小為該檔案的大小pbmfh = (BITMAPFILEHEADER*)malloc(dwFileSize);if( !pbmfh ){CloseHandle(hf);return NULL;}// 讀取數據bSuccess = ReadFile(hf, pbmfh, dwFileSize, &dwBytesRead, NULL);CloseHandle(hf);// 效驗檔案大小和檔案格式if( !bSuccess || dwFileSize != dwBytesRead|| pbmfh->bfType != 0x4D42 || pbmfh->bfSize != dwFileSize){free((void*)pbmfh);return NULL;}// 進行DIB轉換hBitmap = CreateDIBitmap(GetWindowDC(NULL),(BITMAPINFOHEADER*)(pbmfh + 1),CBM_INIT,(BYTE*)pbmfh + pbmfh->bfOffBits,(BITMAPINFO*)(pbmfh + 1),DIB_RGB_COLORS);free((void*)pbmfh);return hBitmap;}