将变量指针作为字符串传递给另一个函数



我不知道它是否可能,但我需要的是访问(使用和释放)一个TStream变量通过它的指针,传递一个字符串参数给另一个函数。

这里有一个"不工作"我想做的例子:

procedure TForm1.Button1Click(Sender: TObject);
var
  Stm: TMemoryStream;
begin
  Stm := TMemoryStream.Create;
  try
    Memo.Lines.SaveToStream(Stm);
    Stm.Position := 0;
    Memo.Clear;
    Edit.Text := IntToStr(Integer(@Stm));
  except
    Stm.Free;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  PStm: ^TMemoryStream;
begin
  PStm := Pointer(StrToInt(Edit.Text));
  try
    Memo.Lines.LoadFromStream(PStm^);  // <--- Access Violation
  finally
    PStm^.Free;
  end;
end;

感谢您的任何帮助来解决这个问题!

TStream是一个引用类型。您的Stm变量保存一个指向流对象实例的指针。您希望传递这个指针值,而不是局部变量的地址。下面是固定的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  Stm: TMemoryStream;
begin
  Stm := TMemoryStream.Create;
  try
    Memo.Lines.SaveToStream(Stm);
    Stm.Position := 0;
    Memo.Clear;
    Edit.Text := IntToStr(Integer(Stm));
  except
    Stm.Free;
    raise;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  Stm: TMemoryStream;
begin
  Stm := Pointer(StrToInt(Edit.Text));
  try
    Memo.Lines.LoadFromStream(Stm);
  finally
    Stm.Free;
  end;
end;

相关内容

  • 没有找到相关文章

最新更新