|
|
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
Коротко об ошибке. Если в проекте используются MDI формы и у какой-то из них установлено свойство MaxButton = .F., то при определенном стечении обстоятельств приложение сваливаеться с ошибкой доступа к памяти (0xc0000005). У меня в приложении это было так: есть базовый класс формы проекта frmbase от которого наследуються все классы форм проекта. В базовой форме св-во MDIForm = .t. Есть базовый класс диалога frmdialog, наследующийся от frmbase. В нем MaxButton=.f. MDIForm = .t. (забыл убрать) Действия пользователя: Вызов экземпляра диалога. Вызов из диалога формы с гридом. Выход из формы. Закрытие диалога. Приложение сваливаеться если до вызова диалога существовала какая-либо форма, развернутая на весь экран. Код демонстрирующий ошибку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. К сожалению эта ошибка трудно воспроизводима в реальном приложении. Что бы ее локализовать мне пришлось очень долго перепахивать весь проект, постепенно убирая из форм все что не приводит к ошибке, до тех пор пока не остались пустые формы со свойствами MDIForm = .t. и MaxButton = .f. :-). Поэтому если вы используете MDI формы и ваше приложение иногда сваливаеться с 0xc0000005 проверьте св-во MaxButton. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 17:25 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
*проверьте св-во MaxButton хотел сказать проверьте св-во MDIForm в формах, которые не должны раскрываться на весь экран. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 17:32 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
Баг конешно на лицо, но он не связан непосредственно с тем как фокс очищает память от объектов. Судя по всему какой-то конфликт с системным меню. Поставь SET SYSMENU OFF и баг пропадет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 18:08 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
Я и не говорил что связан. Это другая история. Если убрать меню баг действительно пропадает, но зачем его убирать?. Пользователь здорово нервничает когда у него окно программы дергаеться. Гораздо правильней убрать MDIForm с окна, которое не должно раскрываться на весь экран, т.к. на это св-во на это окно не должно распространяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 18:26 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
Hi Krey! Да, а собственно перед падением можно заметить "лишнюю" иконку системного меню - слева от первого пункта главного меню - т.е. судя по всему, фокс "забывает" убрать эту иконку, т.к. считает что после закрытия максимизированной MDIForm очередная активизируемая MDI форма (а это по сути есть "предыдущая форма") тоже будет максимизируемой, но это не так - вот это самое системное меню потом и вызывает падение. При этом если закрывать форму не по кнопке (ThisForm.Release()), а через это самое системное меню, или "крестик", или хоткеем Ctrl+F4 - то проблемы не будет - тогда это "встраиваемое" системное меню удалится при закрытии формы. Даже программная эмуляция вида KEYBOARD '{CTRL+F4}' и та прячет проблему. Вообще-то стоит это дело послать в MSFT как багрепорт. В VFP9SP1 проблема имеет место быть. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 01:45 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
В VFP9 без SP тоже есть, и боюсь что в VFP8SP1 тоже присутствует. Проверять лень. Баг репорт пошлите сами, у меня начальство-скряги и Fox соответственно пиратский. Незачем светиться лишеий раз. Насчет того почему этот баг возникает здесь не все ясно. Ясно только то, что это как-то связано с интегрированием меню окна. После закрытия формы FormChildClass форма MaxMDIFormClass переходит в нормальный режим окна. Соответственно MDI тут не работает. Кроме того мне не понятно почему система валиться только после выгрузки FormParentClass. Т.е. если ее скрыть, но оставить висеть в памяти программа "временно" работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 11:16 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
Да это один из тех багов которые кочуют в фоксе от версии к версии. Просто мало кому удается их четко выделить. Я для интереса пустил код на VFP6. Фокс отругался на меню, но не упал. Отсюда кстати и сделал вывод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 11:55 |
|
||
|
Интерфейсная бага VFP приводящая к ошибке 0xc0000005
|
|||
|---|---|---|---|
|
#18+
Hi Krey! > В VFP9 без SP тоже есть, и боюсь что в VFP8SP1 тоже присутствует. > Проверять лень. В VFP8SP1 точно так-же. > Баг репорт пошлите сами, у меня начальство-скряги и Fox соответственно > пиратский. Незачем светиться лишеий раз. ;) > Насчет того почему этот баг возникает здесь не все ясно. Ясно только то, > что это как-то связано с интегрированием меню окна. Угу, с "встраиванием" системного меню (того что Move,Minimize,Close...) максимизируемого окна - причём только для MDI окон - иначе это меню на своём месте остаётся - под иконкой окна в его Caption. Видимо не отслеживается та ситуация, что если фокус уходит на "неразворачиваемое" окно, то и собственно другие, ранее максимизированные MDI окна уходят в состояние Normal - а при этом их системное меню "возвращается" под иконку! Т.е. из линейки меню его надо выкинуть - а это не делается. > Кроме того мне не понятно почему система валиться только после выгрузки > FormParentClass Не только - просто кликни по этому "левому" во всех смыслах :) меню (т.е. по иконке которая осталась в строке меню). Также думаю что и некоторые другие манипуляции с меню могут вызвать падение. Помнится с этой-же иконкой связан и другой глюк - где-то MSFT ошиблось слегка, и при добавлении этой самой иконки в строку меню, эта самая строка меню "вырастает" в высоту на 1 пиксель :( Это обычно незаметно, но скажем открой окно редактирования кода, максимизируй его (это тоже MDI окно), а потом через Ctrl+F1 попереключайся между ним, и скажем командным окном, которое не является MDI - хорошо заметно "прыгание" системного тулбара. С пользовательскими MDI и не-MDI окнами ситуация аналогична. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 02:59 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=277&tid=1592450]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 360ms |

| 0 / 0 |
