Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VB

Программирование VB

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема. VB6 закрывается тихим сапом вместе с редактором. Даже не мяукнув..
 
 автор: akkorn   (13.07.2012 в 15:26)   личное сообщение
 
 

Нашел интересную ошибку, которая приводит тихому закрытию как вашего приложения, ТАК И СРЕДЫ РАЗРАБОТКИ!!!

Последовательность:
-создаем новый проект
-создаем форму Frm1, в ней ListBox Lst1
-создаем модуль (имя не важно). В модуле пишем:


Option Explicit

Sub main()
Call uTst(lTst)
End Sub

Sub aa1()
Dim m1 As String: m1 = "ads"




End Sub


-далее закрываем проект, сохраняем. По идее, здесь страшного нет ничего. При попытке запустить проект без компиляции- редактор, по идее, должен остановить по ошибке на "Call uTst(lTst)". И все тут. Каково же будет ваше удивление, когда после нажатия на кнопку сообщения окно программы закроется, а в месте с ним тихим сапом закроется и сам редактор. Попробуем?

Ни чего не выходит? Стоит как мертвый и все как должно быть?
Согласитесь, что бы мы ни прописали в процедуре aa1, ОНО ни коим образом не должно отыграть на реакции проекта при его запуске. Верно?? Эта процедура просто вообще не задействуется. Более того, данную процедуру можно преспокойно забросить в кучу других в другие модули! И не найдете вы ее, т.к. она не вызывается в нашем проекте. Да и форма тут ни коим образом не проходит.
Это по идее.

А в реалии не так.

Сохраняем проект, выходим из редактора.

Далее снова открываем проект, и первым делом пишем в процедуре aa1 после определения переменной m1 ЧЕТЫРЕ НОВЫЕ СТРОЧКИ, которые и будут той критической ошибкой:
dim r() as long
redim r(0) as long
r(0)=0
frm1.lst1=r

и на выполнение БЕЗ ЛИШНИХ ДЕЙСТВИЙ!
Обращаю внимание, надо именно вручную набить эти строчки! Раскомментирование не прокатит. Не прокатит и просто запуск с этими строчками, как и копирование их из буфера. Сработает только в том случае, если этих строк в редакторе не было, и только при первом запуске проекта. В любых других случаях все происходит в соответствии с моими ожиданиями.

Обратите внимание: эта ошибка плавающая! Может не сработать первый раз. В таком случае закрываем редактор без сохранения (в том виде, как приведено выше), и снова на запуск и вручную нибиваем код. Причин же этого самого плавания я так и не обнаружил. Но у меня стабильно эту ошибку можно поймать. Не знаю как у вас будет.

Вот инфа, кот. я нарыл в инете:

Правила кодирования

Размещение операторов
В каждой строке кода размещается, как правило, один оператор, причем целиком. Однако иногда для улучшения читабельности одна логическая строка кода может быть разбита на несколько физических строк (с помощью символа продолжения строки – символа подчеркивания) или несколько логических строк могут быть объединены в одну физическую (с помощью символа объединения строк – символа двоеточия), например:

1. Text1.Text = ”Эта строка ” & _
”могла бы быть ” & _
”очень длинной.”

2. Text1.BackColor = vbYellow: Text1.ForeColor = vbRed



или вот еще от самих:

http://msdn.microsoft.com/ru-ru/library/xxda45fy.aspx



Кто что думает??
В 2008 (у мня его нет) такой же эффект???

На отлов этого косяка у меня ушло полдня приблизительно. А началось все с определения безобидного массива. А казалось бы...

Ответ: проблема в двоеточии. Уберете- и все буит нормуль.

Так-то


Вообще я не знаю ни единой ошибки, которая ведет себя подобным образом... Вернее не знал...

  Ответить  
 
 автор: час   (16.07.2012 в 10:01)   личное сообщение
 
 

интересно.

  Ответить  
 
 автор: akkorn   (17.07.2012 в 16:04)   личное сообщение
 
 

Что интересно? Тоже себя так ведет??
Я просто очень часто использую объединение строк. Но такойфинт ушами мне не нравится...

  Ответить  
 
 автор: час   (17.07.2012 в 21:33)   личное сообщение
 
 

Я никада не объёдиняю так строки.
никада.

  Ответить  
 
 автор: akkorn   (17.07.2012 в 21:57)   личное сообщение
 
 

Плохо. мне. плохо... охоххх скока переделывать то... Вот же ж подкралася негодяйка ваще даже не со спины- аж прям передо мною появилась, еще и напугав....


Плохо то, что... А ЧТО ЕЩЕ я не знаю? Согласитесь, косяки подобного рода несколько выводят из строя...

  Ответить  
 
 автор: час   (18.07.2012 в 10:04)   личное сообщение
 
 

напиши найти и заменить и фигач.

  Ответить  
 
 автор: akkorn   (19.07.2012 в 16:15)   личное сообщение
 
 

Пасипп, да это выход. Главное не забыть о таком баге

  Ответить  
 
 автор: Дядя Федор   (19.07.2012 в 16:20)   личное сообщение
 
 

Полагаю баг в том, что двоеточие стоит после определения (DIm ... : ...)
С другими операторами прокатит.
Если m1 сразу присваивается м.б. лучше так:
Const m1 As String = "ads"

  Ответить  
 
 автор: akkorn   (19.07.2012 в 16:31)   личное сообщение
 
 

Это если подразумевается константа. Если же возможны будующие изменения- то данный подход не подходит

to Дядя Федор

баг в том, что двоеточие стоит после определения (DIm ... : ...)


Спасибо за идею, возможно это и есть камень преткновения

  Ответить  
 
 автор: akkorn   (24.07.2012 в 08:46)   личное сообщение
 
 

Выяснил, что моя старая версия 6.0.81.76 так себя вела. Обновленная же версия 6.0.97.82 себя так уже не ведет, чему я безмерно рад- видать они там поправили некоторые баги

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList