У меня есть приложение .NET 3.5 winforms, которое вызывает метод в VB6 ActiveX DLL, который вызывает диалоговое окно.Почти 10 лет все работало нормально (сначала как приложение .NET 1.1, затем 2.0, затем 3.5, все на Windows XP).Теперь, когда клиент обновился до Windows 7, я испытываю System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Структура вызова выглядит следующим образом:
.NET Code
try {
VB6Object obj = new VB6Object();
obj.DoStuff();
}
catch (Exception ex) { // handle }
код VB6 в классе объекта VB6
Public Sub DoStuff()
on error goto errHandle
RetrieveData();
Call frmPopup.Show(vbModal)
exitPoint:
exit sub
errHandle:
' handle error
End Sub
Проблема начинается с кода VB6 в этой строке: Call frmPopup.Show(vbModal)
.Ошибка распространяется на код .NET (обработчики ошибок в коде VB6 полностью игнорируются), где я обрабатываю ошибку.Я думал, что проблема может быть в событии Load frmPopup, но код никогда не достигает события Load (у меня везде есть инструкции трассировки, так что я так знаю).
Интересная частьчто во второй раз, когда я звоню, он вообще не выходит из строя, но в форме отсутствует сторонняя сетка (ActiveX DevExpress Quantum Grid), поэтому я предполагаю, что сетка, вероятно, как-то не совместима с Windows 7.
Все, что я описал, происходит, когда я просто запускаю приложение как EXE или из IDE VS2008, поэтому DLL-библиотека VB6 ActiveX является просто справочной.Если я использую COM-косвенность и запускаю код VB6 в IDE, все работает отлично.
Я пытался запустить программу от имени администратора, но ничего не изменилось.
Куда я могу обратиться, чтобы устранить эту проблему?