自己声明的类能否包含TNMUDP?(200分)

  • 主题发起人 主题发起人 hn_chx
  • 开始时间 开始时间
H

hn_chx

Unregistered / Unconfirmed
GUEST, unregistred user!
本人自己声明了一个gprscommunication类

type
Tgprscommunicate =class
UDP: TNMUDP;
procedure UDPDataReceived(Sender:TComponent;NumberBytes:Integer;FromIP:String;Port:Integer);
private
{ Private declarations }
public
{ Public declarations }
function UDP_register(ip:string;port:integer;rcubh:string;delayint:integer):boolean;
end;

function Tgprscommunicate.UDP_register(ip:string;port:integer;rcubh:string;delayint:integer):boolean;
var
UDP_send:string;
SStream:TMemorystream;
begin
result:=false;
UDP.ReportLevel :=STATUS_BASIC;
UDP.RemoteHost:=ip;
UDP.RemotePort:=port;
Sstream:=TMemorystream.Create ;
try
SStream.Write(UDP_send[1],length(UDP_send));
UDP.SendStream (sstream);
finally
SStream.Free ;
end;
end;

程序运行时访问UDP的属性reportlevel、remotehost、remodeport时会出错
‘Access violation at address 0055f3f8 in module 'remotereadmeters.exe'....’

请问难道自己声明的类中不能包含别TNMUDP、TIMER吗?

 
在create里写上UDP := TNMUDP.create(Self)
在destroy里释放掉udp.free
 
这里和form上放个控件不一样。
所有的东东都要自己create的。
 
没错,使用前必须先创建,使用后必须释放

public
procedure Create(AOwner: TComponent); override;
procedure Destroy; override;
end;

procedure Tgprscommunicate.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

UDP:=TNMUDP.Create(Self)
end;

procedure Tgprscommunicate.Destroy;
begin
UDP.Free;

inherited Destroy;
end;
 
[:D],先创建,析构函数里要注意释放!
 
后退
顶部