|
|
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Есть мой ocx. При завершении приложения, которое его использует, вылетает исключениеProject MyProject.exe faulted with message: 'system exception (code 0xc000041d) at 0x76034662'. Process Stopped. Use Step or Run to continue.Причина в финализации модуля AxCtrls Код: pascal 1. 2. 3. 4. 5. 6. 7. вылетает на посылке окну WM_CLOSE. При этом получается дикий стек :76034662 KERNELBASE.RaiseException + 0x62 :71fa600c ; C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll :72093e55 ; C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll :71c9f1aa ; C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll :75d247ab user32.AddClipboardFormatListener + 0x4b :75d052ac ; C:\Windows\SysWOW64\user32.dll :75d04e4a ; C:\Windows\SysWOW64\user32.dll :75d0e4cf ; C:\Windows\SysWOW64\user32.dll :7732537d ntdll.KiUserCallbackDispatcher + 0x4d :75d06884 ; C:\Windows\SysWOW64\user32.dll Vcl.AxCtrls.ParkingWindowProc(???,???,???,???) :75d247ab user32.AddClipboardFormatListener + 0x4b :75d052ac ; C:\Windows\SysWOW64\user32.dll :75d04a5d ; C:\Windows\SysWOW64\user32.dll :75d04723 ; C:\Windows\SysWOW64\user32.dll Vcl.AxCtrls.Finalization Саму ошибку я обошел, вызвав Код: pascal 1. в деструкторе ActiveX контрола. А вопрос - откуда ошибка? Что происходит? Само окно создается так Код: pascal 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. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 15:19 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_увствую, что проблема именно из-за отсылки сообщения из секции финализации Насколько я в курсе, эти секции в DLL выполняются из DllMain, а там туева хуча запрещённых действий, включая посылку сообщений. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 15:30 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov эти секции в DLL выполняются из DllMain, а там туева хуча запрещённых действий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 17:22 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Тупо "подождать" (таймаутом или Wait) не пробовал? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 19:16 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Тупо "подождать" (таймаутом или Wait) не пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 21:08 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_> Sleep в деструкторе TActiveXControl не помогает. Большой промежуток тоже? Про Wait думать надо, только если дело в отложке (скажем, ждать ответа). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 22:48 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Какой AddClipboardFormatListener на закрытие окна? Не обращай внимания, у Delphi нет отладочной инфы для user32 и она просто берёт "ближайший" экспорт. Скорее всего, там вызывается какая-то внутренняя функция user32. 0xc000041d - это STATUS_FATAL_USER_CALLBACK_EXCEPTION "An unhandled exception was encountered during a user callback." Стек твой выглядит вообще просто: 7. второе исключение / STATUS_FATAL_USER_CALLBACK_EXCEPTION ... тут не интересно 6. user32.dll 5. ntdll.KiUserCallbackDispatcher 4. user32.dll - исключение тут 3. Vcl.AxCtrls.ParkingWindowProc - обрабатывает WM_CLOSE 2. user32.dll .... много 1. Vcl.AxCtrls.Finalization - отправляет WM_CLOSE Короче, смотри по коду, что делает Vcl.AxCtrls.ParkingWindowProc - дважды щёлкни по ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2020, 23:01 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
GunSmoker Короче, смотри по коду, что делает Vcl.AxCtrls.ParkingWindowProc _Vasilisk_ Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2020, 15:17 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Большой промежуток тоже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2020, 15:19 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Я привел ее текст в первом посте. Добавь в неё try-except с протоколированием пойманного. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2020, 15:20 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
GunSmoker 3. Vcl.AxCtrls.ParkingWindowProc - обрабатывает WM_CLOSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2020, 15:21 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Добавил логирование сообщений, какие приходят в оконную функцию после посылки WM_CLOSE Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2020, 16:17 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Ну так на каком сообщении валится-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2020, 13:21 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
GunSmoker Ну так на каком сообщении валится-то? Т.е. WM_CLOSE провоцирует отправку каскада сообщений, и исключение происходит до выхода из обработки WM_CLOSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2020, 15:20 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Т.е. получается ntdll.KiUserCallbackDispatcher user32.dll Vcl.AxCtrls.ParkingWindowProc(WM_CLOSE) user32.dll Vcl.AxCtrls.Finalization ? У тебя трейсер исключений подключен? Можешь посмотреть, что за исключение-то? Или можно точку останова на KiUserCallbackDispatcher поставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2020, 16:00 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
GunSmoker Т.е. получается GunSmoker У тебя трейсер исключений подключен? GunSmoker Или можно точку останова на KiUserCallbackDispatcher поставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2020, 21:45 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
GunSmoker Или можно точку останова на KiUserCallbackDispatcher поставить. Вот, кстати, полная последовательность сообщений на обработку WM_CLOSE Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2020, 12:38 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Добавь в неё try-except с протоколированием пойманного. Если добавить try ... except в оконную функцию, то в секцию except код не заходит. Хотя возникает каскад 0xc000041d. clr.dll в вершине стека наводит на мысль, что проблема в кривом .net модуле, который используется у меня в программе и где просто (это мое предположение исходя из опыта общения с разработчиком этого модуля) куча такого кода Код: c# 1. 2. 3. Т.е. исключение гасится внутри сборки, а вижу я его только в отладчике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2020, 12:59 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ GunSmoker Или можно точку останова на KiUserCallbackDispatcher поставить. Я имел в виду параметры посмотреть. В KiUserCallbackDispatcher передаётся EXCEPTION_RECORD и CONTEXT. Что в EXCEPTION_RECORD? C0000005? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2020, 13:53 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Пардон, попутал KiUserCallbackDispatcher с KiUserExceptionDispatcher... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2020, 14:04 |
|
||
|
Убийство парковочного окна
|
|||
|---|---|---|---|
|
#18+
Мои комменты выше можно игнорировать, я прочитал не то, что написано. Я думал, там вызывается KiUserExceptionDispatcher, т.е. считал, что произошло какое-то исключение, и при его обработке выбрасывается второе (STATUS_FATAL_USER_CALLBACK_EXCEPTION). А на самом деле там идёт вызов KiUserCallbackDispatch - это когда ядру нужно дёрнуть пользовательский код. Например, при рассылке сообщений. Получается, что какой-то код (вероятно из этой .NET сборки?) кидает исключение (оконная процедура или какой-то фильтр/ловушка) и оно всплывает на самый верх. Поскольку там дальше должен быть возврат в ядро, необработанных исключений быть не может, вот и возбуждается STATUS_FATAL_USER_CALLBACK_EXCEPTION. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2020, 14:17 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40023656&tid=2037805]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 429ms |

| 0 / 0 |
