如何在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。任何想法为什么会失败?
编辑: 我确实想知道为什么会失败
答案 0 :(得分: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;