我正在处理一个提供32位自定义句柄的组件,我想用标准的窗口HANDLEtypes来包装它。 在传统组件中,我已经看到了使用以下两种转换方法:
// value is 32-bits auto value = GetCustomHandle(); HANDLE hA = HANDLE(value); HANDLE hB = (void*)(SIZE_T)value;
hA和hB总是相等吗? 如果不是,在什么情况下呢?
在这种情况下,我认为它们总是相当的,因为:
谢谢。
就个人而言,我会去与C + +风格演员:
HANDLE hCPP = reinterpret_cast<HANDLE>(value);
你可能会得到一个“将窄类型转换为更宽类型”的警告(或者是编译器使用的术语),在这种情况下,表达式应该是:
HANDLE hCPP = reinterpret_cast<HANDLE>(static_cast<uintptr_t>(value));
类型uintptr_t
保证是无符号的并且匹配指针的大小。 使用MS定义的类型只会使它更便于移植 – 在Windows软件中通常不是一个大问题,但将代码设置为便携是毫无益处的。