之前没有使用过安全数组,
这是对接一个VB做的Com接口,内存块已经取到//现在遍历出每个元素的结构体,可是怎么读也不对,还望各位指点一点,没有过这方面的经验
PosLogInfo=packedrecord
ReadMark:Byte;
CardNo:Double;
SFType:Smallint;
SFMealTypeID:Smallint;
SFAmount:Double;
CardBalance:Double;
SFDate:TDateTime;
CardUseTimes:Integer;
SFOpterNo:Smallint;
OrderDate:TDateTime;
ProductID:array[0..9]ofInteger;
ProductNum:array[0..9]ofInteger;
end;
functionSafeArrayToText(p:PSafeArray):string;
var
RBound:TVarArrayBound;
i,UCount:Integer;
xfinfo:PosLogInfo;//消费记录的结构体
begin
VarResultCheck((SafeArrayGetLBound(p,1,RBound.LowBound)));
VarResultCheck(SafeArrayGetUBound(p,1,UCount));
RBound.ElementCount:=UCount-RBound.LowBound;
//元素的个数,没有错,符合接口提示的22个.
//现在遍历出每个元素的结构体,可是怎么读也不对,还望各位指点一点,没有过这方面的经验
fori:=RBound.LowBoundtoRBound.ElementCountdo
begin
FillChar(xfinfo,SizeOf(xfinfo),0);
//这句不知道要如何写,按理是对的,可是不知道怎么回事,读出的值总是不对,而且每条竟然都是一样的
VarResultCheck(SafeArrayGetElement(p,i,xfinfo));
Memo1.Lines.Add('CardNo:'+FloatToStr(xfinfo.CardNo));
Memo1.Lines.Add('SFType:'+FloatToStr(xfinfo.SFType));
Memo1.Lines.Add('SFAmount:'+FloatToStr(xfinfo.SFAmount));
Memo1.Lines.Add('CardBalance:'+FloatToStr(xfinfo.CardBalance));
Memo1.Lines.Add('SFDate:'+formatdatetime('',xfinfo.SFDate));
end;
end;
//FillChar已经清0了结构体,遍历的值竟然全是一样的,说明应该已经有赋值了,而且还不对
CardNo:0
SFType:5120
SFAmount:3.79442416006077E-321
CardBalance:6.21476085095821E-317
SFDate:1899-12-30
CardNo:0
SFType:5120
SFAmount:3.79442416006077E-321
CardBalance:6.21476085095821E-317
SFDate:1899-12-30
CardNo:0
SFType:5120
SFAmount:3.79442416006077E-321
CardBalance:6.21476085095821E-317
SFDate:1899-12-30
CardNo:0
SFType:5120
SFAmount:3.79442416006077E-321
CardBalance:6.21476085095821E-317
SFDate:1899-12-30
分 -->
|