Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизКак изменить размер памяти, на которую указывает указатель? Найти похожие ветки
← →
__DATA__ (2006-08-24 09:42) [0]Допустим у меня есть указатель на строку, далее я получаю строку на которую указывает указатель(Pointer), изменяю ее и пытаюсь вставить новый вариант в память на которую указывает указатель, но если новая строка больше старой, то происходит обрезание "лишней" части строки.
Записываю строку обратно в память, на которую указывает указатель так :Move(PChar(NewString)^, MyPointer^, Length(NewString)+1);
Как расширить память на которую указывает указатель, чтобы у меня помещалась вся новая строка?
← →
Reindeer Moss Eater © (2006-08-24 09:48) [1]НовыйПойнтер := StrNew(<Старая строка>);
← →
MBo © (2006-08-24 09:49) [2]>Как расширить память на которую указывает указатель
А как была выделена эта память?
Вообще проблема смотрится надуманной. Откуда берется эта свистопляска с указателями?
← →
__DATA__ (2006-08-24 09:54) [3]
function TOurNSHandler.Read(pv: Pointer; cb: ULONG; out cbRead: ULONG): HResult;
var
s,OldS,s2,Word,NewWorld: String;
i,n: Integer;
strl: TStringList;
sr: TSearchRec;
b: Boolean;
begin
(*Read Data from DataStream to Browser/URLMON *)
DataStream.Read(pv, cb, @cbRead);
s := StrPas(pv);
OldS := s;
//Меняем содержимое s ...
if Length(s) <= Length(OldS) then //Вот это условие нужно убрать, и чтобы все работало даже если s > OldS
Move(PChar(s)^, pv^, Length(s)+1)
end;
Inc(written, cbread);
if (written = totalSize) then result := S_FALSE else Result := E_PENDING;
end;
← →
Reindeer Moss Eater © (2006-08-24 10:10) [4]Передавай pv как var параметр и распределяй память внутри метода
← →
__DATA__ (2006-08-24 12:22) [5]> [4] Reindeer Moss Eater © (24.08.06 10:10)
Нелья изменить данное событие, нет исходников ...
← →
Сергей М. © (2006-08-24 12:31) [6]
> и чтобы все работало
По-моему, тема эта уже обсуждалась не так давно.
Не будет это работать.
← →
Reindeer Moss Eater © (2006-08-24 12:36) [7]>Нелья изменить данное событие, нет исходников ...
А это кто написал?
if Length(s) <= Length(OldS) then //Вот это условие нужно убрать, и чтобы все работало даже если s > OldS
Move(PChar(s)^, pv^, Length(s)+1)
← →
TUser © (2006-08-24 13:39) [8]Обсуждалось несколько раз тут. Мастера решали (если не ошибаюсь, то Юрий Зотов). Смысл решения - менеджер мапяти (тот, который getmem.inc) хранит эти значения. До этого архива можно достучаться. Формат хранения данных можно узнать, покопав файл getmem.inc.
← →
TUser © (2006-08-24 13:41) [9]Но в целом - не совсем просто придумать задачу, где это действителньо необходимо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.057 c