程序如下:---ReceiveData事件为什么没触发请前辈指教....var fcomm: TFCOMM; viewstring:string; i:integer; rbuf,sbuf:array[16] of byte; //打开串口 procedure TFCOMM.FormShow(Sender: TObject); begin comm1.StartComm; end; //关闭串口 procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction); begin comm1.StopComm; end; //自定义发送数据过程 procedure senddata; var i:integer; commflg:boolean; begin viewstring:=‘’ ; commflg:=true; for i:=1 to 6 do begin if not fcomm.comm1.writecommdata(@sbuf[i],1) then begin commflg:=false; break; end; //发送时字节间的延时 sleep(2); viewstring:=viewstring+ inttohex(sbuf[i],2)+‘’ ; end; viewstring:=‘发送’+ viewstring; fcomm.memo1.lines.add(viewstring); fcomm.memo1.lines.add(‘’ ); if not commflg then messagedlg(‘发送失败 !’ ,mterror,[mbyes],0); end; //发送按钮的点击事件 procedure TFCOMM.Btn_sendClick(Sender: TObject); begin sbuf[1]:=byte($ f0); //帧头 sbuf[2]:=byte($ 01); //命令号 sbuf[3]:=byte($ ff); sbuf[4]:=byte($ ff); sbuf[5]:=byte($ 01); sbuf[6]:=byte($ f0); //帧尾 senddata;//调用发送函数 end; //接收过程 procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); var i:integer; begin viewstring:=‘’ ; move(buffer^,pchar(@rbuf^),bufferlength); for i:=1 to bufferlength do viewstring:=viewstring+ inttohex(rbuf[i],2)+‘’ ; viewstring:=‘接收’+ viewstring; memo1.lines.add(viewstring); memo1.lines.add(‘’ ); end; 

解决方案 »

  1.   

    fsljz(逍遥派掌门人),我在com1上接了一个读卡机,硬件没问题,因为有个程序能读(它读之前要先检查com上是否有读卡机,然后才能读),我用spcomm控件读,为什么不行?ReceiveData事件根本没触发
      

  2.   

    我用spcomm作过电子秤的,没有你说的问题啊?
      

  3.   

    我在com1上接了一个读卡机,硬件没问题,因为有个程序能读(它读之前要先检查com上是否有读卡机,然后才能读),我用spcomm控件读,为什么不行?ReceiveData事件根本没触发
      

  4.   

    一般读卡机厂商都会提供DLL,其中肯定有判断读卡机是否连接COM口成功的函数,不需要用SPCOMM.
      

  5.   

    我现在就是在用SPComm做一个动态连接库。请问在dll中,定义了pchar类型后,怎么用GetMem来分配内存啊。。请给出一小段代码。。我不知道getmem写在那里
      

  6.   

    我现在就是在用SPComm做一个动态连接库。请问在dll中,定义了pchar类型后,怎么用GetMem来分配内存啊。。请给出一小段代码。。我不知道getmem写在那里