-
CloseHandle
鎖定
- 外文名
- CloseHandle
- 位 置
- Kernel32.dll
- TRUE
- 執行成功
- FALSE
- 執行失敗
CloseHandle函數介紹
方法名稱:CloseHandle
位置:Kernel32.dll
BOOL CloseHandle(HANDLE hObject);
參數
hObject :代表一個已打開對象handle。
返回值
TRUE:執行成功;
FALSE:執行失敗,可以調用GetLastError( )獲知失敗原因。
CloseHandle函數説明
關閉一個內核對象。其中包括文件、文件映射、進程、線程、安全和同步對象等。在CreateThread成功之後會返回一個hThread的handle,且內核對象的計數加1,CloseHandle之後,引用計數減1,當變為0時,系統刪除內核對象。
若在線程執行完之後,沒有調用CloseHandle,在進程執行期間,將會造成內核對象的泄露,相當於句柄泄露,但不同於內存泄露,這勢必會對系統的效率帶來一定程度上的負面影響。但當進程結束退出後,系統會自動清理這些資源。
CloseHandle相關問題
CloseHandle返回值
如果函數成功,則返回值為非零。
如果函數失敗,則返回值為零。要獲取擴展的錯誤信息,請調用 GetLastError。
如果應用程序在調試器下運行,則該函數將收到無效的句柄值或偽句柄值,否則將引發異常。如果您兩次關閉一個句柄,或者在FindFirstFile函數返回的句柄上 調用 CloseHandle而不是調用FindClose函數,則會發生這種情況。
CloseHandle參數表
參數 類型及説明
hObject Long,欲關閉的一個對象的句柄
CloseHandle註解
除非對內核對象的所有引用都已關閉,否則該對象不會實際刪除
CloseHandle示例
從一個文件中讀取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; }
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:19次歷史版本
- 最近更新: 亡命听