AccessViolationException, попытка чтения или записи в защищенную память - PullRequest
1 голос
/ 01 апреля 2010

Я использую dll, которая содержит неуправляемый код для взаимодействия с конкретным оборудованием, и я пытаюсь использовать его из C #, но продолжаю получать AccessViolationException.

Что является причиной и как я могу это исправить?

namespace FingerPrint {
    public unsafe partial class Form1 : Form {

        [DllImport("MyDll.dll")]
        public static extern int DoesExist();

        public unsafe Form1() {
            InitializeComponent();

            MessageBox.Show(DoesExist() + "");
        }
    }
}

1 Ответ

1 голос
/ 01 апреля 2010

Примерно 95% всех режимов отказа для неуправляемого кода приводят к нарушению доступа. Вы можете запустить такой режим сбоя, неправильно указав объявление [DllImport]. Но DidExist (), как опубликовано, не может вызвать один.

Обратитесь к поставщику или автору DLL за поддержкой. У них не должно быть проблем с воспроизведением ошибки и ее диагностикой с помощью отладчика и их исходного кода, если вы так легко его допустили.

Для полноты, наиболее типичные причины AccessViolation:

  • ошибка управления памятью в неуправляемом коде, приводящая к повреждению кучи
  • не проверяет данные, вызывает нулевые разыменования или переполнение буфера
  • не проверяет коды ошибок возврата при вызове функций поддержки
...