| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > вызов из 1 процедуры вторую- EaccessViolation |
| Автор: dee63 19.5.2011, 15:09 | ||
| Всем привет! Пишу проект. Смысл его части в том, что надо отловить появление флешки и запустить другую процедуру. В части отлова флешки я не изобретал велосипед и сделал так:
Т.е. что тут получается: как только приходит в систему флешка, то процедура PROC ловит это событие и процедура AddToLog должна вывести в мемо (имеет имя log) строку, которую ей передает процедура Proc. По факту имею: Флешку ловит, доходит до момента, когда AddToLog указывается добавить строку в мемо (строка выделена красным в коде) и выкидывает ошибку EAccess Violation скрине во вложении. Я пробовал с любым объектом-не возможно его модифицировать, та же ошибка. Однако Showmessage работает. Что я не так написал? Ткните пальцем плиз) |
| Автор: superVad 19.5.2011, 16:23 |
| А в этот момент лог уже создан? В него можно что то написать руками например? |
| Автор: dee63 19.5.2011, 16:29 |
| ДА, создан. там принцип какой: Форма открыта, я специально подождал минут 5 и воткнул флешку. тут же и понеслось |
| Автор: chip_and_dayl 19.5.2011, 17:47 |
| Такой вопрос, флешка вставляется после запуска программы или до? |
| Автор: Snowy 19.5.2011, 19:34 |
| Не заноси напрямую в мемо. Заноси куда-нить в другое место, а потом периодически, или по сигналу, закидывай в мему. В качестве сигнала предлагаю использовать PostMessage - сработает, когда очередь сообщений освободится. Попытка влезть в очередь к самому себе во время обработки сообщений, и при этом, требуя результата, сносит крышу в ядре винды и она взрывает исключение. А занесение строк в мемо - как раз и есть вызов SetMessage, который ждет ответа, но не будет получен, т.к. этим ожиданием ты заткнул обработку сообщений. |
| Автор: MetalFan 20.5.2011, 14:00 |
| а может так случиться, что в обработчике log не сработает ни одно из условий, по которому присваивается значение переменной, и в AddToLog уйдет ниинициализированная локальная переменная mess? Что скорее всего и может иногда валить программу. Отсюда вывод: не забываем о том, что локальные переменные неплохо бы как-то инициализировать. |
| Автор: RomanEEP 24.5.2011, 09:08 |
| Строки в Delphi управляются автоматически, поэтому их инициализацию компилятор вставляет сам. И делать это вручную не нужно - компилятор даже никакого хинта и варнинга не выводит |