unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Comm1: TComm;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;
implementation{$R *.dfm}
procedure senddata;
var
i:integer;
commflag:boolean;
begin
commflag:=true;
viewstring:='';
for i:=1 to 6 do
begin
if not form1.comm1.WriteCommData(@sbuf[i],1) then
begin
commflag:=false;
break;
end;
sleep(2);
viewstring:=viewstring+inttohex(sbuf[i],2) +' '; end;
viewstring:='发送'+viewstring;
form1.Memo1.Lines.Add(viewstring);
form1.Memo1.Lines.Add('');
if not commflag then showmessage('发送失败' );
end;procedure TForm1.FormCreate(Sender: TObject);
begin
comm1.StartComm;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;procedure TForm1.Button1Click(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 TForm1.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;end.
系统说这一句话错误,move(buffer^,pchar(@rbuf^),bufferlength);
原因:[Error] Unit1.pas(86): Pointer type required请帮我改一下
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Comm1: TComm;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;
implementation{$R *.dfm}
procedure senddata;
var
i:integer;
commflag:boolean;
begin
commflag:=true;
viewstring:='';
for i:=1 to 6 do
begin
if not form1.comm1.WriteCommData(@sbuf[i],1) then
begin
commflag:=false;
break;
end;
sleep(2);
viewstring:=viewstring+inttohex(sbuf[i],2) +' '; end;
viewstring:='发送'+viewstring;
form1.Memo1.Lines.Add(viewstring);
form1.Memo1.Lines.Add('');
if not commflag then showmessage('发送失败' );
end;procedure TForm1.FormCreate(Sender: TObject);
begin
comm1.StartComm;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;procedure TForm1.Button1Click(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 TForm1.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;end.
系统说这一句话错误,move(buffer^,pchar(@rbuf^),bufferlength);
原因:[Error] Unit1.pas(86): Pointer type required请帮我改一下
或者
Move(buffer, rbuf[1], bufferlength);
或者更增加通用性:
Move(buffer, rbuf[Low(rbuf)], bufferlength);
move(buffer^,//--取缓冲区指针解除引用的值;
pchar(@rbuf)^,//--@rbuf:这是取你的接收缓冲区的入口地址。相当于:@rbuf[0];
//pchar(@rubf)这是将你的接收缓冲区指针转换成PCHAR类型指针;也就是^char
//(pchar(@rbuf))^这样来看就列清楚了,解除指针引用后取值,实际上就是取指针地址内的值了。 bufferlength);
呵~~,看看是不是理解清楚了。
而CHAR类型是最基本的数据类型,正好是一个字节宽度的数据类型。
Move(buffer, rbuf, bufferlength);
或者
Move(buffer, rbuf[1], bufferlength);
或者更增加通用性:
Move(buffer, rbuf[Low(rbuf)], bufferlength);
都可以
Move(buffer^,rcvBuf,20);
//////////////////////
CommStr:string;
Move(Buffer^,CommStr,BufferLength);
/////////////////////////////////////
var rbuf :array[0..100] of byte;
Move(buffer^,pchar(@rbuf)^,bufferlength);
…………………………