Главная страница
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.052 c
3-1135669029
DELORAC
2005-12-27 10:37
2006.02.26
Как получить из базы Oracle тексты создания таблиц?


11-1120737346
rOOse
2005-07-07 15:55
2006.02.26
TreeView


15-1139174677
kilonet
2006-02-06 00:24
2006.02.26
Инструмент для автоматической замены имён переменных


15-1138260290
Чародей
2006-01-26 10:24
2006.02.26
Такты


2-1139228154
~viper~
2006-02-06 15:15
2006.02.26
Проверка почты