C++编译错误:"从'WCHAR*'转换为'WORD'失去精度"

Ben*_*man 5 c++ winapi mingw

MyGUI库.

它的来源有一条线:

mHandle = (size_t)::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

以下是完整的资料来源:
www.pastebin.com/gzqLBFh9

MinGW编译器.

有错误cast from 'CHAR*' to 'WORD' loses precision,selbie给出了在这里添加宏的建议:用WNDCLASSEX创建窗口?[Cpp].感谢他 - 它消失了.

Dav*_*nan 14

问题实际上MAKEINTRESOURCE(IDC_ARROW)与...的类型无关mHandle.[旁白:我同意不mHandle应该这样,size_t但我认为这不是你目前的问题.]

既然IDC_ARROW定义为MAKEINTRESOURCE(32512),那么代码实际上应该是读取的

LoadCursor(NULL, IDC_ARROW)
Run Code Online (Sandbox Code Playgroud)

而不是

LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW))
Run Code Online (Sandbox Code Playgroud)

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

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