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

Вниз

Сохранение TStrings в PByte   Найти похожие ветки 

 
Alex_Korn ©   (2006-02-05 18:16) [0]

Подскажите, пожалуйста, как оптимальнее сохранить TStrings в PByte вместе с Objects ?


 
Desdechado ©   (2006-02-05 18:37) [1]

критерий оптимальности какой?


 
Alex_Korn ©   (2006-02-05 18:52) [2]

Наиболее просто, а не перебирать построчно и записывать.


 
Desdechado ©   (2006-02-05 19:11) [3]

PByte = ^Byte;

и как ты в указатель на байт хочешь сохранить все это?


 
Alex_Korn ©   (2006-02-05 20:07) [4]

Я делаю так:
procedure PByteToStringList(pData:PByte; cbData:DWord; var List:TStringList);
var
i:integer;
cbBuf:DWord;
Strm:TMemoryStream;
begin
Strm:=TMemoryStream.Create;
try
 Strm.Size:=cbData;
 CopyMemory(Strm.Memory,pData,cbData);
 List.Clear;
 List.LoadFromStream(Strm);
 Strm.Position:=Strm.Size-List.Count*SizeOf(DWord);
 for i:=0 to List.Count-1 do
  begin
   Strm.Read(cbBuf,SizeOf(DWord));
   List.Objects[i]:=Pointer(cbBuf);
  end;
finally
 Strm.Free;
end;
end;


 
Alex_Korn ©   (2006-02-05 20:09) [5]

procedure PByteToStringList(pData:PByte; cbData:DWord; var List:TStringList);
var
i:integer;
cbBuf:DWord;
Strm:TMemoryStream;
begin
Strm:=TMemoryStream.Create;
try
 Strm.Size:=cbData;
 CopyMemory(Strm.Memory,pData,cbData);
 List.Clear;
 List.LoadFromStream(Strm);
 Strm.Position:=Strm.Size-List.Count*SizeOf(DWord);
 for i:=0 to List.Count-1 do
  begin
   Strm.Read(cbBuf,SizeOf(DWord));
   List.Objects[i]:=Pointer(cbBuf);
  end;
finally
 Strm.Free;
end;
end;


 
Alex_Korn ©   (2006-02-05 20:11) [6]

Извините ! Не ту процедуру скопировал.
procedure StringListToPByte(List:TStringList; var pData:PByte; var cbData:DWord);
var
i:integer;
cbBuf:DWord;
Strm:TMemoryStream;
begin
Strm:=TMemoryStream.Create;
try
 List.SaveToStream(Strm);
 Strm.Position:=Strm.Size;
 for i:=0 to List.Count-1 do
  begin
   cbBuf:=DWord(List.Objects[i]);
   Strm.Write(cbBuf,SizeOf(DWord));
  end;
 cbData:=Strm.Size;
 ReallocMem(pData,cbData);
 CopyMemory(pData,Strm.Memory,cbData);
finally
 Strm.Free;
end;
end;


 
Desdechado ©   (2006-02-06 10:57) [7]

и в чем здесь неоптимальность?

PS я бы перекрыл метод SaveToStream у TStringList, аналогично LoadFromStream


 
Alex_Korn ©   (2006-02-06 12:26) [8]

Desdechado ©   (06.02.06 10:57) [7]
Просто хотелось "покрасивие".


 
ZeroDivide ©   (2006-02-06 12:53) [9]

А почему PByte, а не PChar ?


 
ZeroDivide ©   (2006-02-06 12:58) [10]

... точнее, PAnsiChar???

var
 My: PAnsiChar;
begin
 My := PAnsiChar(MyStrings.Text);

?????????


 
pargo ©   (2006-02-06 13:57) [11]

Меня попросили в экспортируемых из DLL функциях использовать PByte...


 
ZeroDivide ©   (2006-02-06 14:27) [12]

Ну тогда...

var
My: PByte;
begin
...........
My := PByte(PAnsiChar(MyStrings.Text));


 
ZeroDivide ©   (2006-02-06 14:30) [13]

Даже проще My := PByte(MyStrings.Text);


 
pargo ©   (2006-02-06 16:19) [14]

Спасибо



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
2-1139755166
~Intel~
2006-02-12 17:39
2006.02.26
Шифрование


2-1139659377
Интересующийся
2006-02-11 15:02
2006.02.26
Пример по работе с ресурсами из DLL


2-1139216457
san6
2006-02-06 12:00
2006.02.26
Как поделить строку


4-1133910781
Delphi_is_cool
2005-12-07 02:13
2006.02.26
Дождаться завершения потока


2-1139221023
kyn66
2006-02-06 13:17
2006.02.26
Сканировать содержимое папки