簡體   English   中英

C ++指針作為DWORD

[英]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 )上,通常不會。


  1. 或者,更准確地說,當編譯為將作為32位進程運行的32位可執行文件時,無論您實際運行Windows的實際副本如何,都可以使用它。

不,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM