Je dispose de la méthode (Delphi 2009) :
procedure TAnsiStringType.SetData(const Value: TBuffer; IsNull: boolean = False);
begin
if not IsNull then
FValue:= PAnsiString(Value)^;
inherited;
end;
Il s'agit d'une méthode abstraite de la classe de base, où "Value : Pointeur" attend le pointeur de la donnée correspondante, comme :
String = PString
AnsiString = PAnsiString
Integer = PInteger
Boolean = PBoolean
J'essaie donc de passer la valeur comme ceci :
var
S: AnsiString;
begin
S:= 'New AnsiString Buffer';
SetBuffer(PAnsiString(S));
end;
Mais un casting de AnsiString vers PAnsiString ne fonctionne PAS, je peux voir pourquoi, mais je veux savoir quel est le résultat du casting. J'ai donc écrit un test simple :
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;
Le résultat est :
P1: 5006500
P2: 1242488
P3: 1242488
P4: 5006500
P5: 67
Où :
- 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?
Quelle est la signification de P1 et P4 ?