Вечная тема про сабклассинг под IDE и нажатие на «Stop»

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

Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Хакер » 02.12.2015 (Ср) 1:26

Что-то я никак не пойму.

Сколько я помню, как только заходили разговоры про сабклассинг, автоматически начиналась речь про то, что ай-я-яй как страшно жить — если не снять сабклассинг перед нажатием на кнопку Stop в IDE, то всё рухнет.

Кажется лет 5 назад я пошёл разобраться, в чём же причина падений. Оказалось, что причина в том, что в VB есть баг: поскольку весь VB-шный код при отладке существует исключительно в P-кодной версии, всякое упоминание AddressOf заставляет VB сгенерировать native-кодный переходничок на P-код (и AddressOf возвращает именно адрес переходника), но эти переходники генерируются неправильно. В переходники заложена спасительная логика, которая наоборот должна помогать в таких делах как сабклассинг — при остановке проекта переходники не уничтожаются, а остаются в памяти, но начинают работать в обход P-кодных процедур. Но код «обходного манёвра» генерировался неправильно: сколько бы ни было аргументов у оборачиваемой функции, в переходничке всегда ставился retn 0, так что выполнение обходного манёвра портило стек, что и вызывало крах.

Я об этом неоднократно писал:
viewtopic.php?p=6771319#p6771319
viewtopic.php?p=6781455#p6781455

___________

Так вот!

Сейчас я пошёл посмотреть на тот код, и обнаружил, что:
1) Вопреки моим воспоминаниям о картине вещей, переходники генерируются правильно.
2) Если останавливать проект кнопкой «Stop» под IDE при установленном сабклассинге без его снятия — ничего не падает, как ни старайся.

Отсюда вопрос.

Это было актуально для какой-то старой версии VBA6.DLL, и какой-то сервиспак починил проблему? Или это я когда-то пропатчил свой VBA6.DLL, вылечил проблему и благополучно забыл про этому?

Пожалуйста, проверьте, есть ли у вас проблема падения среды и какая у вас версия VBA6.DLL. Можете сразу слать мне свои VBA6.DLL разных версий.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение ger_kar » 02.12.2015 (Ср) 7:25

Вот моя VBA.dll версия 6.0.0.9782
VBA6.rar
(834.09 Кб) Скачиваний: 176

Хакер писал(а):2) Если останавливать проект кнопкой «Stop» под IDE при установленном сабклассинге без его снятия — ничего не падает, как ни старайся.
Как говориться код проекта в студию, будем тестить в своих условиях и посмотреть что получится :)
Бороться и искать, найти и перепрятать

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

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Хакер » 02.12.2015 (Ср) 7:39

Хеши совпадают (md5: cac38827bcd9f710eae33f949f96ef96). Значит я ничего не патчил (или у тебя могла тоже оказаться пропатченная мной версия?)
Тогда почему народ жалуется? И главное, я же сам наблюдал глючное поведение.

ger_kar писал(а):Как говориться код проекта в студию, будем тестить в своих условиях и посмотреть что получится :)

Наоборот, лучше вы давайте код, который падает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение ger_kar » 02.12.2015 (Ср) 8:04

Ну судя по дате файла VBA6.dll он достаточно свежий, вполне возможно что сервис пак этот глюк устранил.
Хакер писал(а):Наоборот, лучше вы давайте код, который падает.
А у меня ничего не падает. Хотя раньше я помню что то такое вроде было. Если ставить сабклассинг на отдельные контролы, а не на форму, то у меня не падало.
Бороться и искать, найти и перепрятать

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение The trick » 02.12.2015 (Ср) 8:24

Насколько я знаю переходничек не всегда генерируется правильно.
UA6527P

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

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Хакер » 02.12.2015 (Ср) 8:31

The trick писал(а):Насколько я знаю переходничек не всегда генерируется правильно.

Пример приведёшь?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение The trick » 02.12.2015 (Ср) 8:36

Пока не могу, ближе к вечеру.
UA6527P

Адская_Капча
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 60
Зарегистрирован: 28.07.2014 (Пн) 20:22

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Адская_Капча » 02.12.2015 (Ср) 10:58

У Адской Капчи тоже нашлась иная версия Изображение

Как раз та, где рантайм не прогружается в примере асихронного ожидания у The Trick:
Version: 6.0.0.8169
Size: 1 701 648
CRC-32: 41dbe186
MD5: c3d0ca107b96837748373563088b73e8
SHA-1: cb733ef87882d292166fc6dfe76cbec8bc0ee15a


Вот еще какая-то версия нашлась:
Version: 6.0.0.8495
Size: 1 694 992
CRC-32: 889b7b9b
MD5: 23de4b074125fac427372c386648d104
SHA-1: 2f2fc00a3c5afbe9f8d90a7c7b35383059bf951f


А в Microsoft Office еще какая-то DLL-ка VBE6.DLL есть...

Хакер писал(а):Значит я ничего не патчил (или у тебя могла тоже оказаться пропатченная мной версия?)

Эта версия с хешем (md5: cac38827bcd9f710eae33f949f96ef96) тоже есть... Неужели сам Хакер ее патчил и она распространилась Изображение?

Может, здесь есть какая-то связь с замечательным открытием The Trick о смещении в AddressOf +&H16 для IDE, поэтому падает, т.к. это "ненастоящий" AddressOf?

Архив с VBA6.rar
(1.63 МиБ) Скачиваний: 164

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Adam Smith » 09.12.2015 (Ср) 17:48

Извините за оффтоп, но вас ещё удивляют трюки эмэс?

msvbvm ver. 6.00.8176 June 24, 1998
msvbvm ver. 6.00.8495 May 10, 1999
msvbvm ver. 6.00.8964 August 21, 2000
msvbvm ver. 6.00.9690 September 3, 2002
msvbvm ver. 6.00.9782 February 23, 2004
msvbvm ver. 6.00.9802 August 1, 2007
msvbvm ver. 6.00.9815 March 5, 2009

все они у меня есть и на некоторых из них даже двухпоточные программки работают

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

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Хакер » 09.12.2015 (Ср) 17:52

Adam Smith
А в чём трюки-то?

The trick
Ну что, вечер уже близко?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение The trick » 09.12.2015 (Ср) 18:42

Нет времени вообще, не до этого пока мне. Простой пример падает если поставить брейкпоинт внутри WndProc и когда функция остановится там, нажать стоп.
UA6527P

Adam Smith
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 25.04.2008 (Пт) 9:04
Откуда: ЧР. Грозный

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение Adam Smith » 09.12.2015 (Ср) 21:59

Да, в одной только ХР их несколько версий было в разные годы)))
Народ у кого Win10 x86 может дадите библиотечку для коллекции?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Вечная тема про сабклассинг под IDE и нажатие на «Stop»

Сообщение jangle » 10.12.2015 (Чт) 19:50

Кстати в 2009 году было выпущено обновление для VB6 и компилятора. Я даже ставил его.
Не помню оно или нет https://www.microsoft.com/en-us/downloa ... px?id=7030


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 70

    TopList  
cron