Как получить доступ к закрытому методу 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;