Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Странная проблема.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
2-1152768217
Pack
2006-07-13 09:23
2006.07.30
Last в Richedit


8-1138798641
Ling
2006-02-01 15:57
2006.07.30
TShockwaveFlash


15-1151857716
Fl@sh
2006-07-02 20:28
2006.07.30
обьясните что за глюк??


2-1152354773
Arcalel
2006-07-08 14:32
2006.07.30
удалить папку как


2-1152194709
maniaks1
2006-07-06 18:05
2006.07.30
Два вопроса