C编译错误:“从’WCHAR *’转换为’WORD’会失去精度”

MyGUI库.

它的来源有一条线:

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

mHandle是size_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编译器.

从’CHAR *’到’WORD’的错误转换失去了精度,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是LPTSTR但是MAKEINTRESOURCE()需要WORD.这解释了您看到的错误消息.事实上,IDC_ARROW已经是一种资源类型,无需进一步处理.

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

相关文章
相关标签/搜索