我正在尝试在某些Delphi项目中构造自己的类。代码是这样的:
type
TMyClass = class(TObject)
private
hwnMain, hwnChild: HWND;
Buffer, URL: string;
Timer: TTimer;
public
procedure ScanForClass;
end;
var
Form1: TForm1;
TimerAccess: TMyClass;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
TimerAccess.ScanForClass;
end;
procedure TMyClass.ScanForClass;
begin
Timer:= TTimer.Create(Application); **here I get Access Violation!!**
Timer.Interval:= 5000;
Timer.Enabled:= true;
为什么会出现访问冲突?
最佳答案
您的代码在使用它之前不会创建该类的实例。
因此,它将在此代码中引发访问冲突异常:
procedure TForm1.FormCreate(Sender: TObject);
begin
TimerAccess.ScanForClass;
end;
因为TimerAccess仍未初始化(未定义)。
在FormCreate中,调用构造函数并将实例分配给变量
procedure TForm1.FormCreate(Sender: TObject);
begin
TimerAccess := TMyClass.Create;
TimerAccess.ScanForClass;
end;
在FormDestroy中,调用析构函数进行清理:
procedure TForm1.FormDestroy(Sender: TObject);
begin
TimerAccess.Free;
end;
注意:如果有很多TForm1实例,该代码将不起作用,因为变量TimerAccess是全局变量,并且每个Form实例都会在FormCreate中分配一个新的TMyClass实例,从而导致内存泄漏。一种解决方案是使TimerAccess成为Form类的属性(或字段)。