Ошибка «Попытка чтения или записи в защищенную память» в Win7 - ошибка элемента управления ActiveX - PullRequest
4 голосов
/ 13 января 2011

У нас есть приложение для Windows (.net, VS2010), которое использует старый упакованный элемент управления ActiveX (VSPrinter 8 от ComponentOne, если быть точным. Vsprint8.ocx). Это обрабатывает все наши печати и предварительный просмотр печати. Когда мы развертываем и запускаем наше приложение на свежем экземпляре Win7 на виртуальной машине (32 бита) и делаем что-то, что пытается вызвать этот элемент управления, мы получаем следующую ошибку:

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

Он продолжает нормально работать в Windows XP. Интересно, что если мы отключим DEP на целевой виртуальной машине (для всей системы, установив AlwaysOff), приложение будет работать. Но если мы отключим DEP только для исполняемого файла, использующего ocx, это не сработает.

Есть идеи? Спасибо!

1 Ответ

5 голосов
/ 14 января 2011

Нашел решение.

Я не смог эффективно отключить DEP для соответствующего исполняемого файла, поэтому я добавил следующие строки в командную строку события после сборки в VS2010, и это исправило мою проблему:

call "$(DevEnvDir)\..\..\VC\bin\vcvars32.bat"
call "$(DevEnvDir)\..\..\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)"

В VS Solution Explorer щелкните правой кнопкой мыши проект под решением, выберите «Свойства» и нажмите «Создать события».Вы увидите текстовое поле «Командная строка события после сборки:», в которое вы вставляете вышеуказанный материал.

Это эффективно отключило DEP для моего приложения.Вот запись в блоге, которая помогла мне увидеть свет.Спасибо, случайный чувак!

http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other-memory-is-corrupt.aspx

...