检查HKEY HANDLE是否有效?

时间:2014-10-10 22:29:59

标签: c++ registry handle

我使用的功能基本上是这样做的:

HANDLE someHandler;
RegCloseKey((HKEY) someHandler);

RegCloseKey()返回ERROR_SUCCESS后,我会检查以下内容:

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

但我现在看到上述情况永远不会成真。我尝试用null, null pointer替换INVALID_HANDLE_VALUE的检查,但它们都失败了。如何检查手柄是否有效?

1 个答案:

答案 0 :(得分:2)

RegCloseKey不会更改句柄值。它只是关闭手柄。关闭后,变量someHandler会记住句柄值是什么,但它没用。您可能希望将其设置为无效值,而不是对其进行测试:

RegCloseKey(someHandler);
someHandler = INVALID_HANDLE_VALUE;

这将使您在关闭它之后不会意外地尝试使用它。这种模式可以应用于动态内存,文件句柄等。您还可以考虑使用专为C ++设计的框架,为您隐藏资源管理的一些细节。例如,ATL为注册表访问提供了比面向C的Windows API更自然的C ++接口。