Ошибка компиляции в C ++: «приведение из WCHAR * к WORD теряет точность - PullRequest
4 голосов
/ 26 июля 2011

Библиотека MyGUI.

В источниках есть строчка:

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

mHandle is 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 компилятор.

Произошла ошибка cast from 'CHAR*' to 'WORD' loses precision и selbie дал совет добавить сюда макрос: Создать окно с WNDCLASSEX? [Cpp] . Благодаря ему - оно исчезло.

Ответы [ 2 ]

13 голосов
/ 27 июля 2011

Проблема на самом деле 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() являются ошибочными.

3 голосов
/ 27 июля 2011

mHandle не должно быть WORD - это совершенно неправильно. Значение WORD составляет 16 бит, а значение size_t обычно составляет 32 или 64 бита, в зависимости от параметров компилятора, такого же размера, как указатель с теми же параметрами. Поскольку 32 и 64 больше 16, компилятор жалуется, и это правильно.

Кажется, у вас есть неправильное определение size_t, вы должны это исправить. Тогда вам следует переопределить mHandle так, чтобы это был действительно дескриптор, а не size_t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...