相关疑难解决方法(0)

将AnsiString强制转换为PAnsiString会发生什么?

我有方法(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)

delphi string casting

5
推荐指数
2
解决办法
2617
查看次数

标签 统计

casting ×1

delphi ×1

string ×1