在C ++中,我可以简单地将指针强制转换为DWORD吗?
MyClass * thing;
DWORD myPtr = (DWORD)thing;
那会有用吗?
答案 0 :(得分:5)
在Windows中,以这种方式传递指针是很常见的,例如在windows消息中。 LPARAM是LONG_PTR的typedef,通常用于将指针传递给某些结构。您应该使用reinterpret_cast<DWORD_PTR>(thing)
进行投射。
答案 1 :(得分:5)
你无疑可以这样做。
它是否有效将取决于环境以及您希望它做什么。
在32位Windows 1 (最常见的DWORD
位置)上通常会没问题。在64位Windows(您也看到DWORD
,但不是那么多),它通常不会。
答案 2 :(得分:1)
不,在64位进程中,指针是64位,但DWORD只有32位。使用DWORD_PTR。
答案 3 :(得分:1)
http://en.cppreference.com/w/cpp/language/explicit_cast
阅读,了解这一点,避免使用C风格的演员表,因为它们隐藏了很多。
这样做可能是可行的,但没有意义,例如DWORD是4个字节,指针(这些天)是8。
reinterpret_cast<DWORD&>(myPtr);
应该有效,但它可能是未定义的或截断的,如果有什么可行的话!
BTW,reinterpret_cast
是C ++的说法“相信我亲爱的编译器,我知道我在做什么” - 它试图将一件事的位(0和1)解释为另一件事,无论如何这有多大意义。
合法用途虽然是着名的1 / sqrt hack;)