oleVariant序列化对象

midas支持使用OLEVARIANT序列化对象,最新的DATASNAP支持使用OLEVARAINT和JSON来序列化对象。

下面的代码演示OLEVARINAT序列化TPARAMS, TPARAMETERS对象。OLEVARIANT本质上是一个BYTE数组。

 

还原TPARAMS对象

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对象

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对象

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;

转载于:https://www.cnblogs.com/hnxxcxg/archive/2012/02/26/2368590.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值