Самая важная причина не использовать их в том, что ES6 не поддерживается во всех средах.
Конечно, это может не повлиять на вас вообще, но все же: YAGNI . Не используйте шаблонные литералы, если вам не нужна интерполяция, многострочные литералы или неограниченные кавычки и апострофы. Большая часть аргументов из . Когда использовать двойные или одинарные кавычки в JavaScript? , переносятся также. Как всегда, сохраните свою базу кода согласованной и используйте только один строковый литерал, в котором вам не нужен специальный.
HWND является дескриптором к окну. Этот тип объявляется в WinDef.h следующим образом:
ДЕСКРИПТОР определения типа HWND;
ДЕСКРИПТОР является дескриптором к объекту. Этот тип объявляется в WinNT.h следующим образом:
определение типа ДЕСКРИПТОР PVOID;
Наконец, PVOID является указателем на любой тип. Этот тип объявляется в WinNT.h следующим образом:
определение типа пусто *PVOID;
Так, HWND является на самом деле указателем на пустоту. Можно бросить длинное к HWND как это:
HWND h = (HWND) my_long_var;
но очень остерегающийся того, какая информация хранится в my_long_var. Необходимо удостовериться, что у Вас есть указатель там.
Более позднее редактирование: предупреждение предлагает, чтобы Вам включили 64-разрядные проверки мобильности. Если Вы создаете приложение на 32 бита, можно проигнорировать их.
Пока Вы уверены, что ДЛИННЫМ, который Вы имеете, является действительно HWND, затем это столь же просто как:
HWND hWnd = (HWND)(LONG_PTR)lParam;
Выполнение, которое только безопасно, если Вы не работаете на версии на 64 бита окон. ДЛИННЫЙ тип составляет 32 бита, но тип ДЕСКРИПТОРА - вероятно, 64 бита. Необходимо будет сделать код 64 битами чистый. Короче говоря, Вы захотите изменить ДЛИННОЕ на LONG_PTR.
Правила для использования типов указателей:
Не бросайте указатели на интервал, долго, ULONG или DWORD. Если необходимо бросить указатель, чтобы протестировать некоторые биты, установить или очистить биты или иначе управлять его содержанием, используйте тип INT_PTR или UINT_PTR. Эти типы являются целочисленными типами, которые масштабируются к размеру указателя и для 32-и для 64-разрядный Windows (например, ULONG для 32-разрядного Windows и _int64 для 64-разрядного Windows). Например, предположите портирование следующего кода:
ImageBase = (PVOID) ((ULONG) ImageBase | 1);
Как часть процесса портирования, Вы изменили бы код следующим образом:
ImageBase = (PVOID) ((ULONG_PTR) ImageBase | 1);
Используйте UINT_PTR и INT_PTR в соответствующих случаях (и если Вы не уверены, требуются ли они, нет никакого вреда в использовании их на всякий случай). Не бросайте свои указатели на типы ULONG, ДОЛГО, INT, UINT или DWORD.
Обратите внимание, что ДЕСКРИПТОР определяется как пустота*, таким образом преобразовывание тип ДЕСКРИПТОРА оценивает ULONG, оценивают тесту, устанавливают или очищают младший разряд, 2 бита являются ошибкой в 64-разрядном Windows.