Необработанное исключение типа “System.AccessViolationException” в mscorlib.dll

143
29 мая 2019, 16:40

Возвращаясь к проблеме данного кода Глобальный хук клавиш. Оказалось он работает, НО только при установке Цели платформы х32. Моя программа разработана для x64 систем.

При попытке нажатия определенной клавиши возникает следующая ошибка:

Необработанное исключение типа "System.AccessViolationException" в mscorlib.dll Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

На строку:

Int32 vkCode = Marshal.ReadInt32((IntPtr)L);

Как это можно исправить (используя онли x64)?

Answer 1

Размер указателей в x64 не совпадает с размером типа int. Если вы используете для представления указателей тип int, он будет работать только в x86. Правильное объявление Low-Level Keyboard Hook callback должно выглядеть так:

IntPtr KeyboardHookCallback(int nCode, IntPtr wParam, IntPtr lParam)

Тип IntPtr соответствует размерности указателя текущей платформы. Вообще, полный рабочий пример кода с Low-Level Keyboard Hook приведен здесь: Как отловить все клавиши через низкоуровневый хук?

READ ALSO
Сдвиг элеманта на 7 влево C#

Сдвиг элеманта на 7 влево C#

Разрабатываю алгоритмНе могу понять, как реализовтаь сдвиг элементов

141
Лишний автоинкремент в таблице

Лишний автоинкремент в таблице

Создал таблицу в конструкторе MS SQL ServerСвязал с DataGridView, настроил автоинкремент поля ID

166
project.Documects всегда пустой Roslyn

project.Documects всегда пустой Roslyn

при запуске проекта document всегда пустой

145
Как внедрить System.Data в exe?

Как внедрить System.Data в exe?

На компьютере у одного пользователя не установлен SqlClientСоответственно у меня используются экземпляры класса System

128