gpt4 book ai didi

c++ - 从类指针到 long 的 reinterpret_cast

转载 作者:可可西里 更新时间:2023-11-01 10:00:27 26 4
gpt4 key购买 nike

我用这些行在 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(ruben build)。

最佳答案

阅读我的 original comment .

问题在于 sizeof(window::Window *) 大于 sizeof(long),这意味着您无法有效地将指针的值存储在。这解释了错误。

现在,您真正应该真正想要的是使用SetWindowLongPtr相反。

Note To write code that is compatible with both 32-bit and 64-bit versions of Windows, use SetWindowLongPtr. When compiling for 32-bit Windows, SetWindowLongPtr is defined as a call to the SetWindowLong function.

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

关于c++ - 从类指针到 long 的 reinterpret_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com