![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Invalid pointer operation [D7, 2003]
sergnnn © (2007-09-26 14:20:00)Уже голову сломал. Что это может быть?
Внутри простенького собственного класса, есть TStringList, который я создаю в Create своего класса. А потом хочу в одном месте после работы очистить этот лист, делаю StringList.Clear - получаю ошибку Invalid pointer operation.
Для теста заменил очищение на ShowMessage(StringList.GetText) - все ок, показывает данные.
Куда мне копать?
Anatoly Podgoretsky (2007-09-26 15:19:00) [1]Это у тебя только начало, дальше наткнешься, что в dll своя RTTI
Reindeer Moss Eater (2007-09-26 15:08:00) [2]передавать Text стринглиста как PChar
DVM (2007-09-26 15:05:00) [3]
> Можно ли использовать вместо TStringList при передаче обычный
> массив
можно конечно - передавай PChar с разделителями, скажем нулевыми симоволами + длину.
Сергей М. (2007-09-26 15:00:00) [4]
> ой как не хочется дополнительную библиотеку
А как у тебя обстоят дела с использованием рантайм-пакетов при сборке exe и dll ?
> Можно ли использовать вместо TStringList при передаче обычный
> массив
Все зависит от того, что будет твориться в dll с этим переданным массивом и кто будет ответственен за уничтожение массива.
Германн (2007-09-26 14:58:00) [5]
> или есть другое решение?
>
PChar ещё никто не отменял.
sergnnn (2007-09-26 14:55:00) [6]Да, похоже я про ShareMem в приложении забыл. Просто было дело думал обойдусь без TStringList при передаче в dll и убрал все ссылки на ShareMem, а все стринги при передаче заменил на WideString.
А сейчас в случае с TStringList не удастся избежать использования ShareMem, ой как не хочется дополнительную библиотеку (D7)?
Можно ли использовать вместо TStringList при передаче обычный массив .. array of WideString, дабы измежать ShareMem или есть другое решение?
Сергей М. (2007-09-26 14:51:00) [7]Подозреваю к тому же, что ShareMem указан не там, где ему положено быть указанным.
clickmaker (2007-09-26 14:49:00) [8]
> dll использует ShareMem
a exe?
Сергей М. (2007-09-26 14:48:00) [9]
> dll использует ShareMem
Этот же ShareMem в такорй ситуации обязаниспользовать и exe.
Условие это тобой соблюдено ?
sergnnn (2007-09-26 14:45:00) [10]Да, самое главное сказать пожалуй забыл этот TStringList передается в dll.
dll использует ShareMem.
Сергей М. (2007-09-26 14:43:00) [11]В программе используется передяча строк между exe и dll ?
Virgo_Style (2007-09-26 14:42:00) [12]sergnnn (26.09.07 14:37) [3]
StringList.Free;
StringList := TStringList.Create;
опять ошибка.
Где-то есть ссылка, которая становится битой?
DVM (2007-09-26 14:41:00) [13]
> Вообще, из-за чего это может происходить?
Из-за ошибки в 17 строке. Мы долго гадать будем?
Если там кода уйма, то повыкинь лишнее или создай тестовый пример, в котором проявляется ошибка.
sergnnn (2007-09-26 14:37:00) [14]Кода уйма. И вроде ничего там нет страшного.
Ещё пример, исправил очистку на
StringList.Free;
StringList := TStringList.Create;
опять ошибка.
Заменил на создание нового, без уничтожения старого
StringList := TStringList.Create;
Все ок. Вообще, из-за чего это может происходить?
Ega23 (2007-09-26 14:23:00) [15]Код покажи
DVM (2007-09-26 14:22:00) [16]
> Куда мне копать?
код давай