程序报错:
Exception EAccessViolation in module GDI32.DLL at 0000A400.Access Violation at address 77F4A400 in module 'GDI32.DLL'.Read of address 0017C000.
怎么办?
Exception EAccessViolation in module GDI32.DLL at 0000A400.Access Violation at address 77F4A400 in module 'GDI32.DLL'.Read of address 0017C000.
怎么办?
Delphi 的对象其实全是指针,
象Bitmap之类的不在控件板上的对象,定义了对象以后,其实只是定义了一个指针,用之前必须先用MyVarBitmap:=TBitmap.Create(Self)构造。否则必错无疑。
(其他自己定义的对象也一样)
Delphi使用的是应用对象模型
定义一个对象变量,其实只是定义了一个该类对象的引用,而引用的目标不存在
这和C++不同
引用类似于C++中的指针
e.g.
Type
TwzClass=class //类的定义
public
i:integer;
.......
end;
var
wz:TwzClass; //其实只是定义了TwzClass的一个引用而已,
wz1:TwzClass;
wz.i:=9; //出错,Delphi在编译时应该给出警告的
正确的方法
wz:=TWzClass.Create; //生成一个TWzClass的实例,然后wz指向该对象而已
wz1:=wz; //wz1和wz指向同一对象
如果
wz1.i:=8;
那么
wz.i也应该为8
在C++中
定义
class CwzClass
{
public:
int i;
};
CwzClass c1,c2; //对象已经存在
c1.i=9;
c2=c1; //把c1对象复制一份并赋值给c2,c1和c2各不相干,
c2.i=8;
此时
c1.i为9
c2.i为8比较Delphi和C++Builder的代码就可以知道了