複製鏈接
請複製以下鏈接發送給好友

CloseHandle

鎖定
CloseHandle包括文件、文件映射、進程、線程、安全和同步對象等。涉及文件處理時,這個函數通常與vb的close命令相似。應儘可能的使用close,因為它支持vb的差錯控制
外文名
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;
}