我有方法(Delphi 2009):
procedure TAnsiStringType.SetData(const Value: TBuffer; IsNull: boolean = False);
begin
if not IsNull then
FValue:= PAnsiString(Value)^;
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
这是基类上的抽象方法,其中"Value:Pointer"需要相应数据的指针,如下所示:
String = PString
AnsiString = PAnsiString
Integer = PInteger
Boolean = PBoolean
Run Code Online (Sandbox Code Playgroud)
所以我尝试传递这样的值:
var
S: AnsiString;
begin
S:= 'New AnsiString Buffer';
SetBuffer(PAnsiString(S));
end;
Run Code Online (Sandbox Code Playgroud)
但是从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: ' …Run Code Online (Sandbox Code Playgroud)