【问题标题】:Checking if a HKEY HANDLE is valid?检查 HKEY HANDLE 是否有效?
【发布时间】:2014-10-13 23:40:34
【问题描述】:

我正在使用一个基本上可以做到这一点的函数:

HANDLE someHandler;
RegCloseKey((HKEY) someHandler);

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

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

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

【问题讨论】:

    标签: c++ registry handle


    【解决方案1】:

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

    RegCloseKey(someHandler);
    someHandler = INVALID_HANDLE_VALUE;
    

    这样可以防止您在关闭它后意外尝试使用它。同样的模式也适用于动态内存、文件句柄等。你也可以考虑使用为 C++ 设计的框架,它为你隐藏了资源管理的一些细节。例如,与面向 C 的 Windows API 相比,ATL 为注册表访问提供了更自然的 C++ 接口。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2014-11-03
      • 2013-06-24
      • 2015-04-11
      • 2011-11-14
      • 2015-11-26
      • 2017-02-28
      • 2011-09-06
      相关资源
      最近更新 更多