Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странная проблема. [D7, XP]


AlexanderMS ©   (2006-07-08 18:54:00) 

Столкнулся со странной проблемой: программа использует DLL, подключает "динамическим способом" (если можно так выразится). Всё работает. Затем DLL выгружается, выполняется процедура. А потом выскакивает ошибка. Решил просмотреть по шагам. И вот, после выполнения этой процедуры у меня стоит exit. Курсор переходит на exit. Всё ОК. Уходит с exit. И бац - ошибка. У меня ещё такого не было. Процедура ведь выполнилась отлично, а ошибка, как будто, в процедуре
exit. Пробовал её (exit) убрать. Всё выполняется, и после end, когда уже программа приступает к обработке сообщений (ну то есть выполнение моего кода закончено, и программа "в ожидании") - та же история. Обратите внимание: не зависит от процедуры: возникает после end той процедуры, после которой программа обрабатывает новые сообщения.
Может, здесь и не в DLL дело, а процедура сама работает (она ещё в другом месте вызывается, так что с ней - всё в порядке). Как бороться с напастью - не знаю. После сообщения об ошибке программа вполне работоспособна.


Leonid Troyanovsky   (2006-07-12 21:48:00) [1]


> Loginov Dmitry ©   (12.07.06 21:20) [14]

> А что, где-то сказано, что символы нельзя без ShareMem передавать?


Можно, конечно, например, WideString.
Но, это - так сказать, исключение.
Т.е., во многом - не благодаря дельфи.

--
Regards, LVT.


Loginov Dmitry   (2006-07-12 21:20:00) [2]

> Так ведь можно в цикле передавать символы в dll


А что, где-то сказано, что символы нельзя без ShareMem передавать? Где это?


parovoZZ   (2006-07-12 19:56:00) [3]

Так ведь можно в цикле передавать символы в dll. Безо всякиз геморных ShareMem.


Пусик   (2006-07-10 01:46:00) [4]


> Получается, можно строку передать и без ShareMem? Кроме
> как PChar ничё на ум не приходит.


Не передать, а работать со строками внутри DLL.
Для того, чтобы использовать строки исключительно внутри DLL, не нужен общий с основным приложением менеджер памяти.


parovoZZ   (2006-07-10 01:37:00) [5]


> 2. Если весь код с выделением/перераспределением и соответствующим
> освобождением памяти находится в DLL, то ShareMem/FastShareMem
> не нужен.


Получается, можно строку передать и без ShareMem? Кроме как PChar ничё на ум не приходит.


Пусик   (2006-07-09 17:47:00) [6]


> AlexanderMS ©   (09.07.06 09:09) [7]


1. Если строки и прочие динамические переменные и объекты не передаются в DLL и не возвращаются оттуда, то ShareMem/FastShareMem не нужен.
Причем есть некоторые условия, при которых это все же возможно, но для начала этого достаточно.
2. Если весь код с выделением/перераспределением и соответствующим освобождением памяти находится в DLL, то ShareMem/FastShareMem не нужен.


AlexanderMS   (2006-07-09 17:38:00) [7]

Большое спасибо, всё понял!


Loginov Dmitry   (2006-07-09 09:51:00) [8]

> Если так, то объясните, пожалуйста, что именно мне нужно
> сделать?


При создании проекта DLL Delphi в начало модуля пишет подробное руководство к действиям по работе с ShareMem. Попробуй откомпилировать exe и dll с пакетами (в данном случае ShareMem быть не должно). Если ошибка исчезнет, тогда точно все дело в ShareMem.


AlexanderMS   (2006-07-09 09:09:00) [9]


> А какая ошибка?

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 без
> строк.))

Если так, то объясните, пожалуйста, что именно мне нужно сделать?


parovoZZ   (2006-07-09 03:33:00) [10]

А variant с dll поюзать вообще не судьба?


parovoZZ   (2006-07-09 00:21:00) [11]

Так ведь try except end можно и в exe обработать.
100% строки. Без ShareMem низзя. Также низзя ShareMem без строк.))


PSPF2003   (2006-07-08 20:33:00) [12]

Строки передаешь?


Footballer   (2006-07-08 19:58:00) [13]

А ты случайно не используешь TRY EXCEPT END или TRY FINNALY END?


Юрий Зотов   (2006-07-08 19:44:00) [14]

> А какая ошибка?

Похоже, не ошибусь, если скажу, что 216 или 217.


Footballer   (2006-07-08 19:15:00) [15]

А какая ошибка?


Наверх

Титульная страница Поиск, карта сайта Написать письмо