Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1151639667
MrShadow_
2006-06-30 07:54
2006.07.30
Хелп!!!


2-1152650237
XeON
2006-07-12 00:37
2006.07.30
Удаление записи из массива


3-1148558746
atruhin
2006-05-25 16:05
2006.07.30
динамическое создание процедур в FB


15-1151892449
vidiv
2006-07-03 06:07
2006.07.30
Как воспитать в себе чувство ответственности и трудолюбия?


15-1151578256
Gero
2006-06-29 14:50
2006.07.30
Прием денег кредитными карточками





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский