mplk 发表于 2011-8-14 09:33:29

求救c++builder的串口通信问题

就是写一个最简单的通信程序,照着书本写了一通,结果来了一句下面的,死活编不过,我看了书上面的和网上的都不用定义这个的啊。
Unit1.cpp(42): E2451 Undefined symbol 'rdComm'

原函数

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ComNo;
DCBdcb;
StringTemp;
Temp = "COM" +IntToStr(rdComm->ItemIndex+1);          //就是这一句
ComNo =Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
      0, NULL, OPEN_EXISTING, 0, 0);
if(hComm == INVALID_HANDLE_VALUE)
    {
   MessageBox(0,"打开通信端口错误!!","Comm Error",MB_OK);
   return;
   }
GetCommState(hComm,&dcb);
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (!SetCommState(hComm,&dcb))
   {
       MessageBox (0,"通信端口设置错误","Set Error",MB_OK);
       CloseHandle(hComm);
       return;
      }

}

mplk 发表于 2011-8-14 10:18:40

现在直接给它一个字符串了,可以编译。不过打开串口失败。无语

huayuliang 发表于 2011-8-14 10:22:43

这个是啥控件?

bbs2009 发表于 2011-8-14 10:58:34

mplk 发表于 2011-8-14 11:44:52

回复【3楼】bbs2009
回 【2楼】 huayuliang
这个是啥控件?
-------------------------------
貌似没用控件, 貌似 windowsapi。
-----------------------------------------------------------------------

是的。刚才吃饭回来,仔细查了一下,终于接收到单片机发出的数据了。哈哈。

huayuliang 发表于 2011-8-14 14:08:04

俺。。。只会用控件。。实在没法子才自己写。

sdjiangyi 发表于 2011-8-14 14:58:33

void __fastcall TForm7::Button1Click(TObject *Sender)
{
char *ComNo;
DCBdcb;
StringTemp;
Temp = "COM1" ;          //就是这一句
ComNo =Temp.c_str();
HANDLE hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
                0, NULL, OPEN_EXISTING, 0, 0);
if(hComm == INVALID_HANDLE_VALUE)
        {
       MessageBox(0,"打开通信端口错误!!","Comm Error",MB_OK);
       return;
       }
GetCommState(hComm,&dcb);
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (!SetCommState(hComm,&dcb))
       {
           MessageBox (0,"通信端口设置错误","Set Error",MB_OK);
           CloseHandle(hComm);
           return;
          }

//对端口操作
//...............

//关闭端口
CloseHandle(hComm);

}


上述代码我已经测试过 ,用c++builder2009和delphi7分别测试过,无任何问题。

DoDo915 发表于 2011-8-14 15:26:23

rdComm貌似就是一个ComboBox(或者RadioGroup)控件而已,赋值为1,2,3,4...,ItemIndex取当前选择值
ComNo最好加前缀“\\.\”,否则串口号大于10,无法识别

mplk 发表于 2011-8-14 16:48:03

回复【7楼】DoDo915
rdcomm貌似就是一个combobox(或者radiogroup)控件而已,赋值为1,2,3,4...,itemindex取当前选择值
comno最好加前缀“\\.\”,否则串口号大于10,无法识别
-----------------------------------------------------------------------

对的,我改成RadioGroup1就OK了。这本书真害人,还有其它的错误。因为是第一次搞这个,很多东西都不懂,只能照抄。

sdjiangyi 发表于 2011-8-14 18:18:14

回复【8楼】mplk
-----------------------------------------------------------------------

那是因为你没有设置rdcomm的属性, 需要将Style属性设置成csDropDownList值才可以。 不熟悉borland的vcl, 用c++builder和delphi做ui就是纯粹找虐。

本人用bcb 和delphi已经13年。 有什么问题找我,我帮你解决。

sdjiangyi 发表于 2011-8-14 18:20:34

还需要在item属性里,加入几行字符串。 书并没有错误,问题是你没有vcl基础。
页: [1]
查看完整版本: 求救c++builder的串口通信问题