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;

优质内容筛选与推荐>>
1、nginx 全局变量
2、【Android】3.16 离线地图功能
3、关于递归调用的问题
4、基于freeRTOS定时器实现闹钟(定时)任务
5、C#文件读写常用类介绍


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号