![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
String + KOL не так прост как кажется?
Barloggg © (2008-04-14 09:47:00)Есть DLL. в ней форма.
хост консольный с аплетом. в нем центральный объект.
вызываю DLL, даю этой длл прямую ссылку на главный объект.
далее ДЛЛ делает так
O.вложенныйPObj.Name:=EditBox.text;
где Name:string; О - пришедший по ссылке центральный объект.
Все кажется нормальным, Dll выключается, все работает, но на выходе падает.
причем не где-нибудь, а именно в деструкторе того злополучного объекта которому изменили строковое поле из DLL. по прямым ссылкам.
юмор в том что если сделать так:
O.вложенныйPObj.Name:='';
O.вложенныйPObj.Name:=EditBox.text;
то не бабахает.
---------------
кстати если не обнулять предварительно строковое поле перед назначением ей другой строки то такое тоже случается, но тут уже я специально не исследовал.
Причем Дельфийский хелп говорит что за строками следить не надо, все сделает компилятор.
Книга о KOL между делом одной фразой упоминает кратенько что строки надо давить в деструкторе, а то текут.
Но теперь получается что надо их обнулять при каждом назначении?
Кстати еще на эту тему, если в процедуре перед завершением сделать так s:=''; где s - локальный стринг, то компилятор не выдаст hint о том, что значением переменной не используется. тогда как на остальные переменные выдает.
а так полагаю за это ответственнен менеджер памяти? никакими заменами системных пока не пользуюсь. Интересно, а в VCL тоже так глючит?
Есть какой удобный безопасный аналог строки?
Какие подводные камни у shortstring?
Sapersky (2008-04-14 14:58:00) [21]Создай новый проект-DLL и прочитай комментарий, который Дельфи вставляет в dpr-файл.