Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизСохранение 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c