Главная страница
    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.015 c
15-1151568411
Джо
2006-06-29 12:06
2006.07.30
ROR на MIDletPascal или Java(J2ME)


15-1151863644
Зм1й
2006-07-02 22:07
2006.07.30
Почему ветку про кровь удалили?


15-1151664713
NewStar:)
2006-06-30 14:51
2006.07.30
Хочу научиться


1-1150315952
AlexeyT
2006-06-15 00:12
2006.07.30
Как определить доступность WMP ActiveX?


15-1151518964
Rial
2006-06-28 22:22
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский