Variant类型转换成byte数组时出错,急求解决啊

roy456myth 2012-06-19 12:53:24
正在工地调试,急求大家帮忙啊。。。。
var
StrF:String;
i_Count,i:Integer;
ValueF:Variant;
Rev: Array of byte;
RevF:Array[0..30] of byte;
BChar:Array[0..1] of Char;
F,R:real;
begin

StrF:='';
Comm5.Output:=commandtext;
Sleep(2000);
i_Count:=Comm5.InBufferCount;
sleep(500);
ValueF:=Comm5.Input; //ValueF的值为 :020001+3781.0+2452.A
sleep(500);

for i:=0 to i_Count-1 do begin
RevF[i]:=Valuef[i]; //在这里出错了
BChar[0]:=Chr(RevF[i]);
StrF:=StrF+StrPas(BChar);
end;


检测到错误类EVariantinvalidArgError,错误信息 ‘Invalid argument’
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newfang 2012-06-19
  • 打赏
  • 举报
回复
楼主是把那玩意做为一个字符串来使用的?
那就先做一下类型强转就可以了吧。

RevF[i]:=string(Valuef)[i];
xxfly 2012-06-19
  • 打赏
  • 举报
回复
如果用的是MSComm,可以直接用 Array Of Byte;

Procedure TCommMSComm.OnComm(Sender: TObject);
Var
lAryBuf: Array Of Byte;
lBufLength: Integer;
Begin
Case FCommBase.CommEvent Of
comEvReceive:
Begin
lBufLength := FCommBase.InBufferCount;
lAryBuf := FCommBase.Input;

If Assigned(FOnRecvData) Then
OnRecvData(lAryBuf, lBufLength);

End;
end;
End;
看那山瞧那水 2012-06-19
  • 打赏
  • 举报
回复
无效值转成数值出错,要先检查再转

function VarToInt(const V:Variant):Integer;
begin
if TVarData(V).VType <> varNull then
Result:=V
else
Result:=0;
end;
roy456myth 2012-06-19
  • 打赏
  • 举报
回复
有人帮忙看看没

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧