function StringsToPCharArray(var Dest: PPSTR; const Source: TStrings): PPSTR;
var
i: Integer;
s: string;
list: array of PChar;
begin
Dest := AllocMem((Source.Count + 1) * SizeOf(PChar)); // one more for an extra nil pointer
SetLength(List, Source.Count + 1);
for i := 0 to Source.Count - 1 do
begin
s := Source[i];
list[i] := StrAlloc(Length(s) + 1);
StrPCopy(list[i], s);
end;
list[Source.Count] := nil;
Move(list[0], Dest^, (Source.Count + 1) * SizeOf(PChar));
Result := Dest;
end;
procedure PCharArrayToStrings(const Dest: TStrings; const Source: PPSTR; const Count: Integer);
var
i: Integer;
list: array of PChar;
begin
SetLength(list, Count);
Move(Source^, list[0], Count * SizeOf(PChar));
Dest.Clear;
for i := 0 to Count - 1 do
Dest.Add(List[i]);
end;
procedure FreePCharArray(var Dest: PPSTR; const Count: Integer);
var
i: Integer;
list: array of PChar;
begin
SetLength(list, Count);
Move(Dest^, list[0], Count * SizeOf(PChar));
for i := 0 to Count - 1 do
StrDispose(list[i]);
FreeMem(Dest, (Count + 1) * SizeOf(PChar));
Dest := nil;
end;
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。