String类型转化成PChar类型需要注意:
如果使用了将AnsiString字符串强制转换为PChar类型的函数和过程,在使用结束后,要手工把它的长度恢复为原来以Null结束的长度。STRUTILS单元中的RealizeLenght()函数可以实现这一点:
procedure REAlizeLength(var S : String);
begin
SetLength(S,StrLen(PChar(S)));
end;
调用ReallizeLength();
var
S: STing;
begin
SetLength(S,256);//重要首先给字符串分配空间
//调用函数,S现在包含目录字符串
GetWindowDirectory(PChar(s),256);
RealizeLength(S);//设置S的长度为Null结束的长度;
end;
注意:在将字符串转化为PChar类型时要小心,因为字符串在超出其作用范围时有自动回收功能,因此当进行P :=PChar(Str)的赋值时,P的作用域(生存期)应当大于Str的作用域。