我有方法(DELPHI 2009):将AnsiString强制转换为PAnsiString时会发生什么?
procedure TAnsiStringType.SetData(const Value: TBuffer; IsNull: boolean = False);
begin
if not IsNull then
FValue:= PAnsiString(Value)^;
inherited;
end;
这是基类,其中一个抽象方法“值:指向”预计相应的数据的指针,如:
String = PString
AnsiString = PAnsiString
Integer = PInteger
Boolean = PBoolean
所以我尝试通过这样的价值:
var
S: AnsiString;
begin
S:= 'New AnsiString Buffer';
SetBuffer(PAnsiString(S));
end;
但从ANSIString长到PAnsiString不工作演员,我明白为什么,但我想知道什么样的结果铸造是。所以我写了一个简单的测试:
var
Buffer: AnsiString;
P1: Pointer;
P2: Pointer;
P3: Pointer;
P4: Pointer;
begin
P1:= PAnsiString(Buffer);
P2:= Addr(Buffer);
P3:= @Buffer;
P4:= Pointer(Buffer);
P5:= PChar(Buffer[1]);
WriteLn('P1: ' + IntToStr(Integer(P1)));
WriteLn('P2: ' + IntToStr(Integer(P2)));
WriteLn('P3: ' + IntToStr(Integer(P3)));
WriteLn('P4: ' + IntToStr(Integer(P4)));
WriteLn('P5: ' + IntToStr(Integer(P5)));
end;
结果是:
P1: 5006500
P2: 1242488
P3: 1242488
P4: 5006500
P5: 67
其中:
- P2 and P3, is the address of Buffer: AnsiString
- P5 is the Char Ord value of Buffer[1] char, in this case "67 = C"
- How about P1 and P4?
什么是P1和P4的含义是什么?
@Rob:我不能在旁边没有纸张的情况下工作。感谢您的解释。 – 2009-02-14 20:16:40