Правильные макросы HIWORD (), LOWORD () для C#
Я использую VS2008 Express Edition на WinVista Business.
Я работаю с некоторым кодом, который дает мне OverflowExceptions повсюду, и я недостаточно знаком с типами данных, задействованными для решения этой проблемы. У меня есть подозрение, что это может привести к повторному сбою моей программы, но я не могу быть уверен.
Я скачал код для "файлового браузера C#" по адресу Файловый браузер.aspx-файл[^] и код вызывает статическое свойство HiWord, то есть распаковывает слово высокого порядка m.WParam, где m-структура данных, передаваемая переопределению WndProc() любой формы .NET.
Код таков
public static uint HiWord(IntPtr ptr) { if (((uint)ptr & 0x80000000) == 0x80000000) return ((uint)ptr >> 16); else return ((uint)ptr >> 16) & 0xffff; }
и исключение находится на линии
if (((uint)ptr & 0x80000000) == 0x80000000)
. Может ли кто-нибудь помочь мне выяснить, как правильно получить слово высокого порядка (это для сообщения, отправленного из контекстного меню, и я не могу использовать события Windows Forms, потому что я взаимодействую с оболочкой Windows)?
[Совет] когда вы включаете ссылку с помощью тегов <a href>, вам нужно поместить что-то между ней и </a>, иначе ссылка не будет показана.
Philippe Mori
Прежде чем копировать чужой код, убедитесь, что он работает и хорошо написан. Этот код слишком сложен. Нет никаких причин иметь какое-либо состояние в LoWord
функция.
Brian C Hart
Могут ли люди перестать издеваться надо мной? Этот вопрос настолько стар, что мне уже наплевать на ответы на него.