簡體   English   中英

reinterpret_cast從類指針到long

[英]reinterpret_cast from class pointer to long

我在Win64上用以下幾行編寫了一個C ++應用程序:

Window* wnd = 0;
long l = reinterpret_cast<long> ( wnd );

編譯器在最后一行顯示以下錯誤:

error: cast from 'window::Window*' to 'long int' loses precision [-fpermissive] 

我使用此值將其放入SetWindowLong(WindowsAPI)函數中。

我無法理解此錯誤。 我正在使用MinGW-w64(完整版本)。

閱讀我的原始評論

問題是sizeof(window::Window *)大於sizeof(long) ,這意味着您不能有效地將指針的值存儲在l 這解釋了錯誤。

現在,您真正想要的實際上是使用SetWindowLongPtr

注意:要編寫與32位和64位版本的Windows兼容的代碼,請使用SetWindowLongPtr 當為32位Windows進行編譯時, SetWindowLongPtr被定義為對SetWindowLong函數的調用。

window::Window *wnd = ...;
HWND handle = ...;
int index = ...; /* e.g. GWLP_USERDATA */
LONG_PTR val = reinterpret_cast<LONG_PTR>(wnd);
SetWindowLongPtr(handle, index, val);

該消息表明正在編譯的體系結構上的sizeof(long)小於sizeof(window::Window *) long太小而無法將指針的值存儲在目標架構上。

具體來說,您似乎針對的是使用LLP64數據模型的64位Windows系統體系結構。 在LLP64中, long是32位,而指針是64位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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