2014-10-10 95 views
0

我使用的功能,基本上做到這一點:檢查HKEY HANDLE是否有效?

HANDLE someHandler; 
RegCloseKey((HKEY) someHandler); 

RegCloseKey()回報ERROR_SUCCESS後,我檢查以下內容:

if (someHandler == INVALID_HANDLE_VALUE) 
{ ..... } 

但我現在看到的是,上述條件是不正確的。我試圖用null, null pointer替換INVALID_HANDLE_VALUE的檢查,但都失敗了。如何檢查句柄是否有效?

回答

2

RegCloseKey不會更改句柄值。它只是關閉手柄。一旦關閉,變量someHandler就會記住句柄值是什麼,但它沒有用。而不是測試它,你可能需要將其設置爲無效值:

RegCloseKey(someHandler); 
someHandler = INVALID_HANDLE_VALUE; 

,將讓你意外地試圖使用它,你已經關閉後。這種相同的模式可以應用於動態內存,文件句柄等。您也可以考慮使用專爲C++設計的框架,它隱藏了您的資源管理的一些細節。例如,ATL爲註冊表訪問提供了一個比面向C的Windows API更爲自然的C++接口。