function stringtovariantarray(const s: string): olevariant;
var
p: pointer;
begin
result := null;
if length(s) > 0 then
begin
result := vararraycreate([0, length(s) - 1], varbyte);
p := vararraylock(result);
try
move(s[1], p^, length(s));
finally
vararrayunlock(result);
end;
end;
end;
function variantarraytostring(const v: olevariant): string;
var
p: pointer;
size: integer;
begin
result := '';
if varisarray(v) and (vartype(v) and vartypemask = varbyte) then
begin
size := vararrayhighbound(v, 1) - vararraylowbound(v, 1) + 1;
if size > 0 then
begin
setlength(result, size);
p := vararraylock(v);
try
move(p^, result[1], size);
finally
vararrayunlock(v);
end;
end;
end;
end;