帮忙看看这段程序(0分)

  • 主题发起人 主题发起人 pwq
  • 开始时间 开始时间
P

pwq

Unregistered / Unconfirmed
GUEST, unregistred user!

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,2)+" ";
viewstring:="接受"+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add("");
end;
提示错误信息为:
[Error] comm.pas(88): Constant object cannot be passed as var parameter
[Fatal Error] comm1.dpr(5): Could not compile used unit 'comm.pas'
这是为什么啊?哪里错了啊?

 
刚刚有一点地方打错了,上文的双引号应全为单引号
请各位帮帮忙看看剩下的哪里错了?
提示好像是move(buffer^,pchar(@rbuf^),bufferlength);
这句有问题,但我又看不出错在哪里
希望各位大虾帮个忙看看
 
说是常量对象不能作为var参数,是不是不能修改什么值?
下面的提示是必然的,只要有一个不能通过就这样
 
>>move(buffer^,pchar(@rbuf^),bufferlength);
move的一个参数是传地址调用
你用了const型的数据作参数
 
[Error] comm.pas(90): Pointer type required
[Fatal Error] comm1.dpr(5): Could not compile used unit 'comm.pas'
又是什么错误?
 
这段程序好象是串口通信(接收端),
[Fatal Error] comm1.dpr(5): Could not compile used unit 'comm.pas'
这行错误是串口通信的组件没有安装正确

 
To photodelphi:你的话是什么意思呢?能明确点吗?
串口通信组件没有安装正确?
是什么意思?
怎么才能安装好呢?
 
To MrMengyi:
哪个参数我用了const型?
我这个段程序是网上的教学程序,应该不会有什么问题的
而且我看了程序好像也没有什么const声明嘛
 
以下是完整的程序!!!

unit comm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;

type
TFCOMM = class(TForm)
Memo1: TMemo;
Button1: TButton;
Comm1: TComm;
procedure FormShow(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
FCOMM: TFCOMM;
Viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;

implementation

{$R *.dfm}

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,1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf,2)+'';
end;
viewstring:='发送'+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add('');
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);

end;

procedure TFCOMM.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($0f); {帧尾}
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,2)+' ';
viewstring:='接受'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
end;

end.
 
move(buffer^,pchar(@rbuf^),bufferlength);
^^^^^^^^^^^^^
此处是否表示不对
Move(Buffer^,Rbuf[1],BufferLength);注意:你的Rbuf的长度为6
 
后退
顶部