各位大神,我这串口为什么识别不了?
delphi吧
全部回复
仅看楼主
level 4
难道是程序不对吗?
procedure TForm1.findport1Click(Sender: TObject);
var
reg: TRegistry;
ts: TStrings;
i: integer;
begin
ts := TStringList.Create;
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\devicemap\serialcomm',true);
reg.GetValueNames(ts);
memo1.Lines.AddStrings(ts);
for i := 1 to ts.Count -1 do
begin
ComboBox1.Items.Add(reg.ReadString(ts.Strings[i]));
comindex[i]:=strtoint(reg.ReadString(ts.Strings[i])[4]);
Memo1.Lines.Add(reg.ReadString(ts.Strings[i]));
end;
ts.Free;
reg.CloseKey;
reg.free;
end;
procedure TForm1.openport1Click(Sender: TObject);
var
ComSetting:String;
begin
if not MSComm1.PortOpen then
begin
MSComm1.commPort:=comindex[ComboBox1.ItemIndex+1]; //串口号
ComSetting:=ComboBox2.text; //波特率
MSComm1.Settings:=Comsetting+',N,8,1';
MSComm1.PortOpen:=True;
MSComm1.InputMode:=comInputModeBinary;
openport1.Caption:='close port';
end
else begin
MSComm1.PortOpen:=False;
openport1.Caption:='open port';
end;
end;
2017年01月11日 08点01分 1
level 11
你试试单步调试,看看哪一步的执行或者返回值没有达到预期。这样光看代码一般只能够发现些简单的错误。
2017年01月11日 09点01分 2
嗯 好的 我这个程序 实现的是不是这个功能 单步调试会出现invalid port number 哎 急死我了
2017年01月11日 09点01分
回复
杰克奥维奇
:哪一句报错呢?这个还是需要自己确定。你需要锁定在执行哪一句的时候报错。
2017年01月11日 09点01分
@天道玄虚 真的很谢谢你 大神 你人真的很好 我问很多人 人家都不愿意告诉我
2017年01月11日 11点01分
回复
杰克奥维奇
:没事[滑稽]
2017年01月11日 23点01分
level 11
建议你在执行完reg.GetValueNames之后查看一下ts的值是不是你的预期值。
还有,你的for循环算法有问题。如果你通过给ts赋值已经获取了全部的信息,就不要再涉及到reg了,你自己想想是不是。
items有直接添加TStringList的方法,没有必要使用循环。
str to int这一句我觉得不对,你注意一下。
memo可以直接添加 TStringList,没有必要使用循环。
2017年01月11日 09点01分 3
嗯呀 解决了 [哈哈]
2017年01月11日 11点01分
回复
杰克奥维奇
:[哈哈]
2017年01月11日 11点01分
level 4
@天道玄虚 大神 这一段代表啥意思
2017年01月11日 11点01分 4
level 11
16位整数如果有符号,就是从-32768~32767,无符号从0~65535,这个是防止数据溢出。
2017年01月11日 11点01分 5
1