首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将注册表项句柄转换为HKEY

将注册表项句柄转换为HKEY
EN

Stack Overflow用户
提问于 2014-09-10 00:29:02
回答 2查看 860关注 0票数 2

我使用的是一个混合的注册表项功能环境(包括ntdlladvapi32导出的功能)。

我面临的问题是ntdll使用类型HANDLE作为键句柄,而advapi32使用HKEY。我找不到在C++中将HANDLE转换为HKEY的语法,并且不断收到编译器错误。

EN

回答 2

Stack Overflow用户

发布于 2014-09-10 00:33:37

没有要转换的内容。HKEY已经是一个HANDLE

winnt.h:

代码语言:javascript
复制
#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif

windef.h:

代码语言:javascript
复制
DECLARE_HANDLE(HKEY);

如果你遇到编译器错误,你可能已经定义了STRICT,这是为了防止API混合句柄类型。定义STRICT后,HKEY将映射到struct HKEY__*。如果未定义STRICTHKEY将改为映射到HANDLE

既然您知道NTDLL的注册表HANDLE和ADVAPI32的HKEY代表的是同一件事,那么就按原样使用它们,在两个注册表API之间传递句柄时消除类型转换编译器错误。

票数 1
EN

Stack Overflow用户

发布于 2014-09-10 00:51:34

HANDLEHKEY都表示某种不透明的值。

要从HANDLE“转换”到HKEY,只需使用像static_cast<>,这样的适当类型转换,例如:

代码语言:javascript
复制
#define STRICT
#include <Windows.h>

int main() 
{
    HANDLE h = nullptr;
    HKEY hKey = nullptr;

    // Use C++-style cast from HANDLE to HKEY:
    hKey = static_cast<HKEY>(h);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25749711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档