2016-06-17 4 views
1

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

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

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

Отредактировано: Я хочу знать, почему он не

+0

Это, вероятно, не может, потому что он не был скомпилирован с поддержкой расширенного RTTI. –

+2

Вы видели ответ @ LURD здесь: http://stackoverflow.com/questions/36716363/how-to-access-private-methods-without-helpers/37761852#37761852 – MartynA

+0

@Rudy: Я пробовал добавить {$ METHODINFO ON} в моем unit1.pas, но я думаю, что это должно быть сделано в system.classes (где объявлен TStreamReader). – cydo

ответ

1

Это терпит неудачу, потому что частные методы не включены в этот класс. См RTTI access to private methods of VCL, e.g. TCustomForm.SetWindowState

Существует обходной путь для получения частного метода, хотя:

См: How to access private methods without helpers?

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^