Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизСтранная проблема. Найти похожие ветки
← →
AlexanderMS © (2006-07-08 18:54) [0]Столкнулся со странной проблемой: программа использует DLL, подключает "динамическим способом" (если можно так выразится). Всё работает. Затем DLL выгружается, выполняется процедура. А потом выскакивает ошибка. Решил просмотреть по шагам. И вот, после выполнения этой процедуры у меня стоит exit. Курсор переходит на exit. Всё ОК. Уходит с exit. И бац - ошибка. У меня ещё такого не было. Процедура ведь выполнилась отлично, а ошибка, как будто, в процедуре
exit. Пробовал её (exit) убрать. Всё выполняется, и после end, когда уже программа приступает к обработке сообщений (ну то есть выполнение моего кода закончено, и программа "в ожидании") - та же история. Обратите внимание: не зависит от процедуры: возникает после end той процедуры, после которой программа обрабатывает новые сообщения.
Может, здесь и не в DLL дело, а процедура сама работает (она ещё в другом месте вызывается, так что с ней - всё в порядке). Как бороться с напастью - не знаю. После сообщения об ошибке программа вполне работоспособна.
← →
Footballer © (2006-07-08 19:15) [1]А какая ошибка?
← →
Юрий Зотов © (2006-07-08 19:44) [2]> А какая ошибка?
Похоже, не ошибусь, если скажу, что 216 или 217.
← →
Footballer © (2006-07-08 19:58) [3]А ты случайно не используешь TRY EXCEPT END или TRY FINNALY END?
← →
PSPF2003 © (2006-07-08 20:33) [4]Строки передаешь?
← →
parovoZZ © (2006-07-09 00:21) [5]Так ведь try except end можно и в exe обработать.
100% строки. Без ShareMem низзя. Также низзя ShareMem без строк.))
← →
parovoZZ © (2006-07-09 03:33) [6]А variant с dll поюзать вообще не судьба?
← →
AlexanderMS © (2006-07-09 09:09) [7]
> А какая ошибка?Project XXX.exe raised exception class EAccessViolation with message "Access violation at address 0040422A in module "XXX.exe". Read of address 01190AA4". Process stopped. Use Step or Run to continue.
Ещё заметил: если после процедуры поставитьApplication.ProcessMessages
, то ошибка, по всей видимости, там.
> Строки передаешь?
В процедуру эту? Она без параметров. А если в DLL - там есть одна: передаю строку, возвращает строку.
> А variant с dll поюзать вообще не судьба?
Это как? Я не знаю: видно не судьба... :)
> А ты случайно не используешь TRY EXCEPT END или TRY FINNALY
> END?
В некоторых функциях в DLL.
> Так ведь try except end можно и в exe обработать.
> 100% строки. Без ShareMem низзя. Также низзя ShareMem без
> строк.))
Если так, то объясните, пожалуйста, что именно мне нужно сделать?
← →
Loginov Dmitry © (2006-07-09 09:51) [8]> Если так, то объясните, пожалуйста, что именно мне нужно
> сделать?
При создании проекта DLL Delphi в начало модуля пишет подробное руководство к действиям по работе с ShareMem. Попробуй откомпилировать exe и dll с пакетами (в данном случае ShareMem быть не должно). Если ошибка исчезнет, тогда точно все дело в ShareMem.
← →
AlexanderMS © (2006-07-09 17:38) [9]Большое спасибо, всё понял!
← →
Пусик © (2006-07-09 17:47) [10]
> AlexanderMS © (09.07.06 09:09) [7]
1. Если строки и прочие динамические переменные и объекты не передаются в DLL и не возвращаются оттуда, то ShareMem/FastShareMem не нужен.
Причем есть некоторые условия, при которых это все же возможно, но для начала этого достаточно.
2. Если весь код с выделением/перераспределением и соответствующим освобождением памяти находится в DLL, то ShareMem/FastShareMem не нужен.
← →
parovoZZ © (2006-07-10 01:37) [11]
> 2. Если весь код с выделением/перераспределением и соответствующим
> освобождением памяти находится в DLL, то ShareMem/FastShareMem
> не нужен.
Получается, можно строку передать и без ShareMem? Кроме как PChar ничё на ум не приходит.
← →
Пусик © (2006-07-10 01:46) [12]
> Получается, можно строку передать и без ShareMem? Кроме
> как PChar ничё на ум не приходит.
Не передать, а работать со строками внутри DLL.
Для того, чтобы использовать строки исключительно внутри DLL, не нужен общий с основным приложением менеджер памяти.
← →
parovoZZ © (2006-07-12 19:56) [13]Так ведь можно в цикле передавать символы в dll. Безо всякиз геморных ShareMem.
← →
Loginov Dmitry © (2006-07-12 21:20) [14]> Так ведь можно в цикле передавать символы в dll
А что, где-то сказано, что символы нельзя без ShareMem передавать? Где это?
← →
Leonid Troyanovsky © (2006-07-12 21:48) [15]
> Loginov Dmitry © (12.07.06 21:20) [14]
> А что, где-то сказано, что символы нельзя без ShareMem передавать?
Можно, конечно, например, WideString.
Но, это - так сказать, исключение.
Т.е., во многом - не благодаря дельфи.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c