如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer?
How to access the private method TStreamReader.FillBuffer in Delphi 10.1 Berlin?
如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer,我们在 10.1 之前使用 class 助手完成了它 - 但建议的解决方案不起作用:
uses System.Rtti;
procedure TForm1.FormCreate(Sender: TObject);
begin
Assert(Assigned(TRttiContext.Create.GetType(TStreamReader).GetMethod('FillBuffer')),
'Failed');
end;
它失败只是因为 GetMethod returns NIL。知道为什么会失败吗?
已编辑:
我确实想知道为什么会失败
它失败了,因为这个 class 中没有包含私有方法。
参见
虽然有一个获取私有方法的解决方法:
参见:
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;
如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer,我们在 10.1 之前使用 class 助手完成了它 - 但建议的解决方案不起作用:
uses System.Rtti;
procedure TForm1.FormCreate(Sender: TObject);
begin
Assert(Assigned(TRttiContext.Create.GetType(TStreamReader).GetMethod('FillBuffer')),
'Failed');
end;
它失败只是因为 GetMethod returns NIL。知道为什么会失败吗?
已编辑: 我确实想知道为什么会失败
它失败了,因为这个 class 中没有包含私有方法。
参见
虽然有一个获取私有方法的解决方法:
参见:
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;