oleVariant序列化对象
midas支持使用OLEVARIANT序列化對(duì)象,最新的DATASNAP支持使用OLEVARAINT和JSON來(lái)序列化對(duì)象。
下面的代碼演示OLEVARINAT序列化TPARAMS, TPARAMETERS對(duì)象。OLEVARIANT本質(zhì)上是一個(gè)BYTE數(shù)組。
?
還原TPARAMS對(duì)象
procedure VariantToParams(input:OleVariant;par:TParams);
// TParam 's property: fieldType, paramName, ParamType, value, size
// paramType default value ptinput
// size = sizeof(value)
var
? n, i:integer;
begin
? try
??? n:=0;
??? i:=0;
??? par.Clear;
??? while VarArrayHighBound(input,1)>=(n+3)do
??? begin
????? par.CreateParam(TFieldType(input[n+1]),input[n+2],ptInput);
????? par.Items[i].Value := input[n+3];
????? par.Items[i].Size :=SizeOf(input[n+3]);
????? n:=n+3;
????? i:=i+1;
??? end;
? except
??? Exit;
? end;
end;
?
序列化TPARAMS對(duì)象
function ParamsToVariant(par:TParams): OleVariant;
// TParam 's property: fieldType, paramName, ParamType, value, size
// paramType default value ptinput
// size = sizeof(value)
var
? tmpv:OleVariant;
? n,i:integer;
begin
? try
??? tmpv:=VarArrayCreate([1,par.Count*3],VarVariant);
??? n:=0;
??? i:=0;
??? while par.Count>i do
??? begin
????? tmpv[n+1]:=Ord(par.Items[i].DataType);????
????? tmpv[n+2]:=par.Items[i].Name;
????? tmpv[n+3]:=par.Items[i].Value;
????? i:=i+1;
????? n:=n+3;
??? end;
??? result:=tmpv;
? except
??? Exit;
? end;
end;
?
還原TPARAMETERS
procedure VariantToParameters(input:OleVariant;par:TParameters);
// TParameters's property: name, dataType, Direction, size, value
// direction default pdinput
// size = sizeof(value)
var
? n:integer;
begin
? try
??? n:=0;
??? par.Clear;
??? while VarArrayHighBound(input,1)>=(n+3)do
??? begin
????? par.CreateParameter(input[n+1],tfieldtype(input[n+2]),pdInput,SizeOf(input[n+3]),input[n+3]);
????? n:=n+3;
??? end;
? Except
??? Exit;
? end;
end;
?
序列TPARAMETERS對(duì)象
function ParametersToVariant(par:TParameters): OleVariant;
// TParameters's property: name, dataType, Direction, size, value
// direction default pdinput
// size = sizeof(value)
var
? tmpv:OleVariant;
? n,i:integer;
begin
? try
??? tmpv:=VarArrayCreate([1,par.Count*3],VarVariant);
??? n:=0;
??? i:=0;
??? while par.Count>i do
??? begin
????? tmpv[n+1]:=par.Items[i].Name;
????? tmpv[n+2]:=Ord(par.Items[i].DataType);
????? tmpv[n+3]:=par.Items[i].Value;
????? i:=i+1;
????? n:=n+3;
??? end;
??? result:=tmpv;
? except
??? exit;
? end;
總結(jié)
以上是生活随笔為你收集整理的oleVariant序列化对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C/C++语言入门篇 -- 文件操作
- 下一篇: C#学习笔记—了解C#