![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа со строками [Delphi, Windows]
chum © (2005-01-14 21:08:00)Есть такая проблемка.
есть переменная S:PChar
далее делаю присваивание
S:='xxxxxxxxxxxxxxxxxxxxxxx';
далее
S[1]:='q' - вот на этом месте приложение вылетает с ошибкой,
самое интересное, что при использовании VCL всё прекрасно работает.
Мне кажется что надо использовать какую-то директиву, но вот какую не пойму. Помогите решить проблему.
thaddy (2005-01-17 19:40:00) [1]S:String;
Cast it to Pchar, if needed use setlength.
Gleb (2005-01-17 11:53:00) [2]2 RA
Imho, Pchar - указатель, занимает в памяти 4 байта.
Объявление var S:array [0..1023] of charрезервирует в памяти 1Кбайт, поэтому, говорить, что это тот же PChar - некорректно.
RA (2005-01-17 11:05:00) [3]Да, у меня проблема с PChar тоже была. Я вроде делал так:
var S:array [0..1023] of char
По-сути дела тот же PChar, но так вроде лучше. И в конце надо будет самому добавлять chr(0). Проблем с присвоением S[1]:='q' не будет.
nicesc (2005-01-15 12:56:00) [4]chum
Меня раньше этот вопрос тоже интересовал
if self_ <> nil then
Result := self_.WndProc( M ) // Падаем тут
else
if Assigned( Applet ) then
Result := Applet.WndProc( M )
else
Result := DefWindowProc( W, Msg, wParam, lParam );
{$IFDEF DEBUG_ENDSESSION}
Посмотрел в отладчике, проблема со стэком:
Должно быть после
004037F8 |. 8B45 F8 MOV EAX,[DWORD SS:EBP-8]
004037FB |. 8B08 MOV ECX,[DWORD DS:EAX]
ECX=0040301C
а на деле в ЕСХ лежит начало строки, то есть 4 байта строки
ЕСХ=65657165 (eeqe)
Дело в том, что полсе присваивания:
s[1]:='q';
delphi вызывает ф-ию, для дополнительной обработки переменной(PChar), народ поясните на кой?
chum (2005-01-14 23:09:00) [5]2Ajax
Ты видимо не внимателmyj прочёл, такое использование не сомнительно, ведь приработе с VCLвсё нормально и не возникает никаких ошибок. Видимо в VCL используется какая-то директива.
Да и ещё, если для S выделять память динамически, то и в KOL всё работает.
Ajax (2005-01-14 23:05:00) [6]PChar - это указатель на Char. То есть в переменной S ты хранишь адрес первого символа строки. Поэтому мне кажется использовать S[1] крайне сомнительно. Imho нужно либо использовать приведение типов, либо вычислять адрес нужного символа и писать туда.