var
S1,S2:string;
begin
//给S1赋值,S1的引用计数为1
S1:='Andnowforsomething...';
S2:=S1;//现在S2与S1指向同一个字符串,S1的引用计数为2
//S2现在改变了,所以它被复制到自己的物理空间,并且S1的引用计数减1
S2:=S2+'completelydifferent1';
end;
Win32的兼容
正如前面所提到,AnsiString字符串总是null结束的。因此,它能跟以null结尾的字符串兼容,这就使得调用Win32API函数或其他需要PChar型字符串的函数变得容易了。只要把一个字符类型强制转换为PChar类型(在2.8节“强制类型转换和类型约定”中将介绍强制类型转换)。下面的代码演示了怎样调用Win32的GetWindowsDirectory()函数,这个函数需要一个PChar类型的参数:
var
S:String;
begin
SetLength(S,256);//重要!首先给字符串分配空间
//调用API函数,S现在包含目录字符串
GetWindowsDirectory(PChar(S),256);
如果使用了将AnsiString字符串强制转换为PChar类型的函数和过程,在使用结束后,要手工把它的长度恢复为原来以null结束的长度。STRUTILS单元中的RealizeLenght()函数可以实现这一点:
procedureRealizeLength(varS:string);
begin
SetLength(S,StrLen(PChar(S)));
end;
调用ReallizeLength():
var
S:string;
begin
SetLength(S,256);//重要!首先给字符串分配空间
//调用函数,S现在包含目录字符串
GetWindowDirectory(PChar(S),256);
RealizeLength(S);//设置S的长度为null结束的长度
end;