CloseHandle

CloseHandle包括檔案、檔案映射、進程、執行緒、安全和同步對象等。涉及檔案處理時,這個函式通常與vb的close命令相似。應儘可能的使用close,因為它支持vb的差錯控制

基本介紹

  • 外文名:CloseHandle
  • 位置:Kernel32.dll
  • TRUE:執行成功
  • FALSE:執行失敗
函式介紹,函式說明,相關問題,返回值,參數表,註解,示例,

函式介紹

方法名稱: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;}

相關詞條

熱門詞條

聯絡我們