Я получаю 'AccessViolationException' 'Попытка чтения или записи защищенной памяти' при вызове метода в dll x86 при работе на платформе x64 (Windows 7). Все отлично работает на платформах x86.
Я прочитал много-много постов о похожих проблемах, но не смог заставить мой код работать.
Я пытаюсь заставить наше старое приложение x86 успешно работать на Windows 7 (x64) и Server 2008 R2 (x64). Приложение представляет собой ассортимент VB6, VB.Net, C #, MicroFocus COBOL и C ++. (Мы не могли придумать другие языки, которые можно было бы добавить в то время). Код DotNet изначально был написан в Visual Studio 2003 для DotNet 1.1. Я портировал код до Visual Studio 2010 и DotNet 4.0. Я установил цель для всех проектов на x86. Когда я звоню в неуправляемые 32-битные библиотеки DLL, я получаю вышеуказанную ошибку.
Наша процедура установки InstallShield устанавливает библиотеки x86 в C: \ Windows \ sysWOW64 вместо C: \ Windows \ System32. Такое поведение кажется правильным. DLL - это некоторый объектный код COBOL и компоненты времени выполнения, связанные вместе в dll «стиль C». Я не думаю, что проблема связана с COBOL или процессом связывания, так как я также перенес пример приложения из Code Project с приложением VB.Net WinForms, которое вызывает простой C ++ dll, все ориентированные на x86. Я получаю ту же ошибку там. Я также пытался создать приложение командной строки C ++ для вызова DLL. Загрузка библиотеки выполнена успешно. GetProcAddress успешно завершен. Вызов указателя функции для конкретного метода завершается неудачно. Наши приложения VB6 могут вызывать DLL просто отлично при работе на Windows 7 x64. Я также попытался отключить UAC и задать для параметра visibleExecutionLevel в манифесте значение максимально допустимое. Я пытался работать от имени администратора.
Похоже, это должно работать, но не уверен, что попробовать дальше. Есть идеи?