Comstr:String;
  Comcha:Char;
  sizbuff:Cardinal;
  strbuff:Pchar;
m_Buff:pchar;
事情是这样的,我从串口中获取数据,
  Comstr:='';
  WHILE ComPort1.CharReady DO
  BEGIN
    Comcha:=Comport1.GetChar;
    Comstr:=Comstr+IntToHex(Ord(Comcha),2)+'  '
    Inc(RcData);
  END;
然后将获取的字符串付给strbuff,然后进行写操作,
GetMem(strbuff,length(Comstr));
StrPCopy(strbuff,Comstr);
Write(strbuff,sizbuff);procedure Write(pBuff: PChar; uiCount: Cardinal);
var
  i: integer;
begin
  for i := 0 to uiCount do
  begin
    m_Buff[m_uiHead]:=pBuff[i];//为什么在这地方pBuff付给m_Buff只有一半,如
   //pBuff=‘fc fb 00 00’fc,fb是从串口中获取的经过16进制转化的字符,但m_Buff[1]:=pBuff   [1]时,m_Buff[1]=‘f’
    m_uiHead := (m_uiHead + 1) mod CN_MAX_BUFFER_SIZE;
  end;
end;
请问我哪地方出错了!

解决方案 »

  1.   

    概念上 pchar是指针或者数组,string是变量(在某些语言里是类,最好当作类来看待) 
    使用上pchar 一般用法要先申请空间,然后使用strcopy,不要使用“=”.
      

  2.   

    串口操作,建议你用控件,那样很简单,比如spcomm
      

  3.   

    我用apro控件,现在读出数据没问题,是就如上面的只能得到其中一位,不只到哪错了?
    我要是直接用
    改成strbuff:array[1..16] of char
    Write(strbuff,sizbuff);procedure Write(pBuff: //请问这里怎么定义?; uiCount: Cardinal);
      

  4.   

    非要用这么麻烦的方式,不明白。用spcomm从获取到自己取出处理也就几行就够了呢。
    可以考虑用byte,循环读入函数中,然后再处理成字串或者10进制都很方便。