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

,一个SPCOMM串口通信的有关问题

2012-10-06 
求助,一个SPCOMM串口通信的问题用SPCOMM做串口通信,发送/接收数据基本正常,但遇到个问题:收数的时候总是会

求助,一个SPCOMM串口通信的问题
用SPCOMM做串口通信,发送/接收数据基本正常,但遇到个问题:
收数的时候总是会出现"External exception xxxxxx"或者"非法的读写访问xxxxxx"的错误,发送过程很简单,就是把edit1里的一串16进制文本转成byte数组,然后发送,这问题,就是接收有问题,代码如下:

Delphi(Pascal) code
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;  BufferLength: Word);var  i: Integer;  CommData: Array of Byte;begin  SetLength(CommData, BufferLength);  Move(Buffer, CommData, BufferLength);      //接收串口数据  for I := 0 to BufferLength - 1 do    // Iterate  begin    Memo1.Text:= Memo1.Text+ IntToHex(CommData[i],2)+ #32;  end;    // for}  edit2.Text:= IntToStr(bufferLength);end;

跟踪调试发现,当move函数起作用的时候,就会出现上述的异常,如果把move函数注释掉,就不会报错,但是就没办法收数了……
edit2里显示的串口收到的数据长度也没有错。就是move函数那,但是跟踪调试发现,move函数起作用的时候正常的拷贝内存了,那里也没有保存,但就是收到一包数据后就报错……
还有,查看spcomm的源码,发现spcomm没有处理消息,一直case...end,没有任何消息被case到。
Delphi(Pascal) code
procedure TComm.CommWndProc( var msg: TMessage );begin     case msg.msg of          PWM_GOTCOMMDATA:          begin               ReceiveData( PChar(msg.LParam), msg.WParam );               LocalFree( msg.LParam )          end;          PWM_RECEIVEERROR:    ReceiveError( msg.LParam );          PWM_MODEMSTATECHANGE:ModemStateChange( msg.LParam );          PWM_REQUESTHANGUP:   RequestHangup;          PWM_SENDDATAEMPTY:   _SendDataEmpty          else            with msg do            begin              Result:= DefWindowProc(fHwnd, Msg, wParam, lParam);            end;    // with     endend;

而且,
Delphi(Pascal) code
          else            with msg do            begin              Result:= DefWindowProc(fHwnd, Msg, wParam, lParam);            end;    // with

是我后来加的,是不是我用的spcomm有问题呢?
求帮助,求破!!!
谢谢!!!

[解决办法]
move(buffer^,CommData[0],bufferlength);

热点排行