Runtime error 91 только на Win7 64. На остальных ОС порядок.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Runtime error 91 только на Win7 64. На остальных ОС порядок.

Сообщение Rody66 » 02.09.2012 (Вс) 20:20

Доброго дня.
Есть кусок кода (контекст немного запутанный:
Код: Выделить всё
Private Sub SetLevelInfo(ByRef Level As Levels)
    If IsFileExists(Level.Value) Then
        Select Case Right$(Level.Value, 4)
            Case "html", ".htm", ".chm": Level.ValueType = URL
            Case Else: Level.ValueType = File
        End Select
        Level.Content = ReadFile(Level.Value)
        Exit Sub
    End If
    If Left$(Level.Value, 7) = "http://" Then Level.ValueType = URL: Exit Sub
    Level.ValueType = Text
    Level.Content = Level.Value
End Sub

Который не работает только на Win 7 64 и выбрасывает рантайм 91. Если же убрать последнюю строку Level.Content = Level.Value, то всё начинает работать. На первый взгляд мистика какая-то...
Что бы это могло быть?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение Хакер » 02.09.2012 (Вс) 20:30

Что, неужели не хватает сообразиловки поотлаживать на целевой платформе?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение Rody66 » 02.09.2012 (Вс) 22:01

А что там отлаживать? Ясно же, что ошибка на последней строке. Текст ошибки тоже есть. Не вижу нужды в отладке.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение iGrok » 02.09.2012 (Вс) 22:50

Rody66 писал(а):Ясно же, что ошибка на последней строке.

Из чего ты сделал этот вывод? Из того, что всё начинает работать, если её убрать?
Так я тебя огорчу - совсем не обязательно дело именно в ней. Всё зависит от того, что такое Levels.

А учитывая, что никто кроме тебя тут этого не знает, единственный действительно нормальный вариант - отладка на целевой платформе.
label:
cli
jmp label

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение Rody66 » 02.09.2012 (Вс) 23:13

В модуле:
Код: Выделить всё
Public Type StartEnd
    Start As Long
    End As Long
End Type
Public Enum ValueType
    Text
    URL
    File
End Enum
Public Type Levels
    Caption As String
    Value As String
    Content As String
    Sublevel As StartEnd
    ValueType As ValueType
End Type

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение ger_kar » 04.09.2012 (Вт) 17:52

Отладка однако нужна. Без неё никак. При останове на проблемной строке в окне Locals Window посмотреть какие значения содержаться в полях структуры Levels. Ошибка "Ссылка на объект или блок оператора With не установлен", значит либо Level.Content недоступен, либо Level.Value. Что будет если попытаться в окне Immediate в режиме команд попытаться присвоить Level.Content текстовую константу, присвоится или нет.
Может промежуточную переменную ввести в которую значение Level.Value скидавать, а потом присваивать Level.Content = переменная и т.д.
Для тебя имею под рукой твой проект и отладчик выяснить все гораздо проще, так как остальные могут только гадать.
Тем более код в других ОС Работает. По коду источник проблемы без отладки определить вряд ли удастся.
Бороться и искать, найти и перепрятать

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение ark » 10.09.2012 (Пн) 6:32

да код вроде как нормальный (для х86) выглядит. Я даже могу предположить, что в IDE на х64 может прокатить. Тут, похоже, дело не в коде, а в компилере и адресации строк в структуре. Возможно, компиляция на х64 решит проблему. Попробуй всякие разные режимы совместимости. Из области "А вдруг?" - попробуй вместо Level.XXX With...end with

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение ger_kar » 10.09.2012 (Пн) 7:13

Кто нибудь пробовал отладку обычного х86 - 32 битного кода в Win64, OlleDbg например. Будет этот отладчик вообще работать в 64 битной системе?
Тогда можно погонять код в этом отладчике и точно посмотреть что происходит.
Бороться и искать, найти и перепрятать

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение iGrok » 10.09.2012 (Пн) 7:46

ger_kar писал(а):Кто нибудь пробовал отладку обычного х86 - 32 битного кода в Win64, OlleDbg например. Будет этот отладчик вообще работать в 64 битной системе?

Я не только пробовал, но и периодически практикую. А куда он денется-то? Конечно будет работать.
label:
cli
jmp label

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение Rody66 » 11.09.2012 (Вт) 18:44

попробуй вместо Level.XXX With...end with

Сперва так и было -- не работало. В скором времени опробую вариант с отладкой на целевой оси. Насчет совместимости тоже вариант не лучший, ибо даже если заработает, постоянно просить конечного пользователя поставить совместимость -- не самый практичный способ.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение ger_kar » 11.09.2012 (Вт) 19:50

Rody66 писал(а):постоянно просить конечного пользователя поставить совместимость -- не самый практичный способ.
Так можно попробовать это проделать через манифест.
Бороться и искать, найти и перепрятать

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Runtime error 91 только на Win7 64. На остальных ОС поря

Сообщение Rody66 » 15.09.2012 (Сб) 14:06

Пробовал все варианты совместимости -- не помогло. Но, как выясняется, на другой Win 7 64 (не виртаульной) всё работает. Поэтому пока не будет жалоб на данную проблема, думаю, тема не актуальна. Всем благодарен за помощь.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 2

    TopList