我在做一个关于串口通信的程序,用的pcomm.dll,
所以需要create一个串口,然后打开,如代码:ControlorComm := TSComCtrl.Create(zyAccessConfig.CtrlorPort);
ControlorComm.SetBaudRate(zyAccessConfig.CtrlBaud); //默认的波特率为9600然后注册函数:ControlorComm.RegisterIrq(ControlCommReceiveData);
ControlorComm.Open;
我想问的是,我想注册另外一个函数ConfigCommReceiveData;
我的操作是:ControlorComm.close;
ControlorComm.RegisterIrq(ConfigCommReceiveData);
ControlorComm.Open;但是这样导致之前用ControlCommReceiveData这个函数的功能失效了,
把close去掉就好了,这是为什么?
重新注册函数之前不应该先close上一个函数么?

解决方案 »

  1.   

    我在close下面加上sleep(100),也可以,有没有哪位大侠知道为什么啊弄了一天了
      

  2.   

    弄串口通信,为什么不用SPComm3.pas控件呢?既安装简单(即使仅引用不安装也行)又好用,它里面是使用多线程控制的,若感兴趣,留个邮箱,我给你邮过去。
      

  3.   

    使用SPComm3.pas还有一个好处是:发布你的软件时,不必附带你那个DLL文件!!
      

  4.   

    除了楼上说的spcomm,还有cport控件,都是简单好用强大的
    pcomm这个串口注册是干嘛用,串口干嘛还要注册?
      

  5.   

    唉 公司老软件就是用的PComm,没办法都改了,没人知道我问的问题吗
      

  6.   

    PComm很好用的
    PComm中 Irq回调函数有好几个,
    不知道RegisterIrq在内部调用了哪个函数以及RegisterIrq是怎么实现的 所以不能给出更多的建议