这是一个COM通讯的程序
我先得到传来的信息
procedure TdtmCom.FComReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
  sStr : Array [0..512] of Char;
  i : Integer;
  sReadStr : String;
begin
  for i:= 0 to 512 do sStr[i] := #0;
  Move(buffer^,sStr, BufferLength);
  sReadStr := sStr;
  TInstrument.ppSendInfo(sReadStr);
end;然后再要吧这个sStr传送出去,这是写在另一段函数里的
procedure TInstrument.ppSendInfo(AInfo: Srting);
var
  sStr : Array[0..512] of char;
  i, iCount, iLen  :Integer;
begin
  if pbIsListen then begin
      iCount := 1;
      iLen := Length(AInfo);
      for i := 1 to iLen do begin
        sStr[i - 1] := AInfo[i]; Inc(iCount);
      end;
      sStr[iCount-1] := #0;
      dtmCom.FCom.WriteCommData(sStr,iCount);
  end
end;现在我不能再用字符串传送了,必须直接使用Char。我的程序应该怎样改?
ppSendInfo(AInfo:)里的应该怎样定义AInfo的类型,是否需要使用指针?应该怎样使用?

解决方案 »

  1.   

    别的没看见,就觉得
    for i:= 0 to 512 do sStr[i] := #0;
    这句话别扭你直接赋sStr[0] #0不就完了
      

  2.   

    用的spcomm控件吧
    这样修改
    procedure TInstrument.ppSendInfo(AInfo:array of Char;arrayLength:integer);
    调用的时候这样
    procedure TdtmCom.FComReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      sStr : Array [0..512] of Char;
      i : Integer;
    begin
      for i:= 0 to 512 do sStr[i] := #0;//这句可以这样写fillChar(sStr,length(sStr),0);更好些
      Move(buffer^,sStr, BufferLength);
      sReadStr := sStr;
      TInstrument.ppSendInfo(sStr,BufferLength);
    end;