Как получить доступ к закрытому методу TStreamReader.FillBuffer в Delphi 10.1 Berlin?

Как получить доступ к закрытому методу TStreamReader.FillBuffer в Delphi 10.1 Berlin, мы делали это с помощником класса до 10.1 - но предлагаемое решение не работает:

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

это терпит неудачу только потому, что GetMethod возвращает NIL. Есть идеи, почему это не удается?

Отредактировано:я действительно хочу знать ПОЧЕМУ это терпит неудачу

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;
Другие вопросы по тегам