首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

各位CB,关于串口的有关问题

2012-02-26 
各位CB高手请进,关于串口的问题。我创建了一个ComboBox控件,然后存入COM1,COM2,COM3三个串口号。如果计算机

各位CB高手请进,关于串口的问题。
我创建了一个ComboBox控件,然后存入COM1,COM2,COM3三个串口号。
如果计算机上COM3没有或者正在使用,我希望的是当选中COM3,立即弹出对话框报错。
  char *cComNo;
  int iComNo = 0;
  iComNo = Form1->CSerialPortNum->ItemIndex;
  iComNo = iComNo+1;
  switch(iComNo)
  {
  case 1:
  cComNo = "COM1:"; break;
  case 2:
  cComNo = "COM2:"; break;
  case 3:
  cComNo = "COM3:"; break;
  }
  hComm = CreateFile(cComNo,GENERIC_READ | GENERIC_WRITE,
  0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if(hComm == INVALID_HANDLE_VALUE) // 如果COM 未打开
  {
  MessageBox(0,"打开端口错误!","Error",MB_OK);
  }  

这个就是控件中内容改变时的代码。
现在的问题就是,当选择的次数貌似超过3次,就报错了,不管是你是不是选择的可用的串口。
怎么回事啊???新手急救~~~~~~


[解决办法]
是不是打开后,没有关闭,串口不能重复打开。
[解决办法]
每次打开后 需要关闭
CloseHandle(cComNo); 后才能打开

或者你在打开前进行判断一下
//判断串口是或打开
bool __stdcall IsOpen()
{
return cComNo!= INVALID_HANDLE_VALUE;
}
返回true 就说明你打开着,需要关系 才能再次打开
[解决办法]
没关闭
[解决办法]
请关闭了再来。
[解决办法]
给段Delphi枚举系统串口的代码自己改一下咯

Delphi(Pascal) code
procedure TComSet.FormCreate(Sender: TObject); var R:TRegistry;    St:TStringList;    i: Integer; begin    R:=TRegistry.Create;    St:=TStringList.Create;    R.RootKey:=HKEY_LOCAL_MACHINE;    R.OpenKey('\Hardware\DeviceMap\SerialComm',false);    R.GetValueNames(St);    for i:=0 to St.Count-1 do    SelPort.Items.Add(R.ReadString(St.Strings[i]));    R.Free;    St.Free; end; 

热点排行