我2个类之间需要用指针传递。代码大致如下:假设传递 TMyClass自己定义的一个类
PMyClass = ^MyClass;
TMyClass = class
end;TForm1 = class(TForm)
private
List: TList;
fMyClass: TMyClass;
....
end;TForm2 = class(TForm)
procedure
MyClass: PMyClass;
public
procedure Add(PMyClass);
....
....
end;implementation{ Form2 }
procedure TForm2.add(PMyClass);
begin
MyClass:= PMyClass;
end;
{ Form1 }constructor TForm1.create;
begin
List:= TList.create;
List.add(TMyClass.create);//不知道是不是可以这样写。
fMyClass:= TMyClass.create;
end;destructor TForm1.destroy;
begin
TMyClass(List.Items[0]).free;
list.free;
fMyClass.free;
end;procedure TForm1.Send;
begin
//传递上面创建的TStringList给另外一个类。
TForm2.Add(@MyClass); //在form2里使用不会出错。
TForm2.add(List.items[0]); //在form2里使用 MyClass^ 就会出错 TFrom2.add(@TMyClass(List.Items[0]));//编译错误 TMyClass(List.items[0]).string //如果在form1里使用,这样写好像不会出错。
end;请问下为什么用@MyClass在Form2里就可以正常使用。而list.Items[0],即Point类型的就会出错呢。
而用 TMyClass(List.Items[0]) 在form1里却可以正常使用。
不解。
哪位大大指点下小弟。谢谢!
PMyClass = ^MyClass;
TMyClass = class
end;TForm1 = class(TForm)
private
List: TList;
fMyClass: TMyClass;
....
end;TForm2 = class(TForm)
procedure
MyClass: PMyClass;
public
procedure Add(PMyClass);
....
....
end;implementation{ Form2 }
procedure TForm2.add(PMyClass);
begin
MyClass:= PMyClass;
end;
{ Form1 }constructor TForm1.create;
begin
List:= TList.create;
List.add(TMyClass.create);//不知道是不是可以这样写。
fMyClass:= TMyClass.create;
end;destructor TForm1.destroy;
begin
TMyClass(List.Items[0]).free;
list.free;
fMyClass.free;
end;procedure TForm1.Send;
begin
//传递上面创建的TStringList给另外一个类。
TForm2.Add(@MyClass); //在form2里使用不会出错。
TForm2.add(List.items[0]); //在form2里使用 MyClass^ 就会出错 TFrom2.add(@TMyClass(List.Items[0]));//编译错误 TMyClass(List.items[0]).string //如果在form1里使用,这样写好像不会出错。
end;请问下为什么用@MyClass在Form2里就可以正常使用。而list.Items[0],即Point类型的就会出错呢。
而用 TMyClass(List.Items[0]) 在form1里却可以正常使用。
不解。
哪位大大指点下小弟。谢谢!
fMyClass: TMyClass;//这儿定义的是一个对象引用(也可以说成是指针,占四字节)
实际使用时要转换为类型指针.
例:
type
Tb=^integer;
.....
Var
a:pointer;
.....
a:=@xxx;//@地址转换符 xxx整数
Tb(a)^:=xxx;
aClass是个指针,指向TMyClass的实例
@aClass是aClass的地址,在C里来说就是指针的指针>@TMyClass(List.Items[0])
@是对变量取指,而TMyClass(List.Items[0])只是个表达式,不是变量,所以出错。TMyClass(x)是将表达式x转换类型为TMyClass。>TForm2.add(List.items[0]); //在form2里使用 MyClass^ 就会出错
TForm2中需要是^TMyClass类型,即指针的指针(指向一个指针,后面的指针指向TMyClass对象实例),而List.items[0]实际上是指向TMyClass对象实例的,类型不一样,当然要出错。--
http://agui.net.googlepages.com
mailto: agui.cn @ gmail.com