C++ 编译错误 : "cast from ' WCHAR *' to ' WORD' loses precision"

标签 c++ winapi mingw

MyGUI 库。

源码中有一行:

mHandle = (size_t)::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));

mHandlesize_t

LoadCursor 返回 HCURSOR

错误:

D:\Dev\MyGUI_3.2.0_RC1\Common\Input\Win32\ResourceW32Pointer.cpp:48: error: cast
from 'WCHAR*' to 'WORD' loses precision

这是完整的来源:
www.pastebin.com/gzqLBFh9

MinGW 编译器。

有错误cast from 'CHAR*' to 'WORD' loses precision 并且selbie 给出了在此处添加宏的建议:Create window with WNDCLASSEX? [Cpp] .多亏了他 - 它消失了。

最佳答案

问题实际上在 MAKEINTRESOURCE(IDC_ARROW) 并且与 mHandle 的类型无关。 [旁白:我同意 mHandle 不应该是 size_t 但我认为这不是您当前的问题。]

由于 IDC_ARROW 被定义为 MAKEINTRESOURCE(32512),因此代码实际上应为

LoadCursor(NULL, IDC_ARROW)

而不是

LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW))

后面的代码失败是因为 IDC_ARROW 是 LPTSTRMAKEINTRESOURCE() 需要 WORD。这解释了您看到的错误消息。事实上IDC_ARROW已经是一个资源类型,不需要进一步处理。

同样,对 LoadCursor() 的所有其他调用都是错误的。

关于C++ 编译错误 : "cast from ' WCHAR *' to ' WORD' loses precision",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835679/

相关文章:

c++ - 如何反转 QSlider 的范围

C++ DrawText 和 TextOut 不显示任何内容

c++ - 为什么 win32 API 函数没有重载而是使用 Ex 作为后缀?

c++ - 函数指针和dll加载顺序

Windows 8堆栈问题与mingw

c++ - Windows 中的 Eclipse Ganymede 和 MinGW

c++ - 如何杀死或终止 boost 线程

c++ - 如何在 C++ 程序中查看我的硬盘驱动器目录?

c++ - stdio.h 和 iostream 之间有什么区别?

c++ - 错误 : "undefined reference to ` gluNewQuadric@ 0'"