1

如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer,我们在 10.1 之前使用类助手完成了它 - 但建议的解决方案不起作用:

uses System.Rtti;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Assert(Assigned(TRttiContext.Create.GetType(TStreamReader).GetMethod('FillBuffer')), 
    'Failed');
end;

它失败只是因为 GetMethod 返回 NIL。任何想法为什么会失败?

编辑: 我确实想知道它为什么失败

4

1 回答 1

1

它失败了,因为私有方法不包含在此类中。请参阅RTTI 访问 VCL 的私有方法,例如 TCustomForm.SetWindowState

不过,有一种获取私有方法的解决方法:

请参阅:如何在没有助手的情况下访问私有方法?

type
  TStreamReaderHelper = class helper for TStreamReader
  public
    procedure FillBuffer(var Encoding: TEncoding);
  end;

procedure TStreamReaderHelper.FillBuffer(var Encoding: TEncoding);
var
  Method: procedure(var Encoding: TEncoding) of object;
begin
  TMethod(Method).Code := @TStreamReader.FillBuffer;
  TMethod(Method).Data := Self;
  Method(Encoding);
end;
于 2016-06-17T08:56:29.697 回答