[英]C++ Pointer as DWORD
在C ++中,我可以簡單地將指針轉換為DWORD嗎?
MyClass * thing;
DWORD myPtr = (DWORD)thing;
那行得通嗎?
在Windows中,以這種方式傳遞指針是很常見的,例如在Windows消息中。 LPARAM是LONG_PTR的typedef,經常用於將指針傳遞給某些結構。 您應該使用reinterpret_cast<DWORD_PTR>(thing)
進行投射。
您無疑可以做到。
它是否有效取決於環境和您想要做什么。
在32位Windows 1 (最常見的DWORD
)上,通常會沒問題。 在64位Windows(您還會在其中看到DWORD
,但DWORD
)上,通常不會。
不,在64位處理中,指針是64位,而DWORD只有32位。 使用DWORD_PTR。
http://en.cppreference.com/w/cpp/language/explicit_cast
讀那本書,了解那一點,避免使用C樣式轉換,因為它們隱藏很多。
這樣做也許可以完成,但毫無意義,例如DWORD為4個字節,而指針(這些天)為8。
reinterpret_cast<DWORD&>(myPtr);
應該可以,但是如果有任何可行的方法,它可能是未定義或截斷的!
順便說一句, reinterpret_cast
是C ++的一種說法,“相信我親愛的編譯器,我知道我在做什么”-它試圖將一件事的位(0和1)解釋為另一件事,而不管其含義如何。
雖然合法使用是著名的1 / sqrt hack;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.