Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Как изменить размер памяти, на которую указывает указатель?   Найти похожие ветки 

 
__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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.058 c
2-1156839056
Нео666
2006-08-29 12:10
2006.09.17
Компонент TTreeView


15-1156100676
Некто
2006-08-20 23:04
2006.09.17
Не удаляется файл.


6-1145771824
Junior
2006-04-23 09:57
2006.09.17
Блокировка соединения по ip/MAC адресу


15-1156176174
X9
2006-08-21 20:02
2006.09.17
Рендеринг в файл с прозрачностью (3dsMax)


15-1156359146
Petr V. Abramov
2006-08-23 22:52
2006.09.17
Про обчество патредблеия и старых пердунов