我已经阅读了这些问题和答案
How to change the implementation (detour) of an externally declared function
但我不能想像如何修补一个类的私人方法,位于不安的单位.
检查这个样本我想修补Bar程序.
Unit ThidParty; Interface Type TFoo =Class private procedure Bar; end;
那么,我如何修补delphi类的私有方法?
解决方法
下面列出的解决方案适用于Delphi Seattle的版本.
您可以使用 class helper来破解课程:
您可以使用 class helper来破解课程:
单元1
type TTest = class private procedure Foo; end;
单元2
type TMyTestHelper = class helper for TTest function GetFooAddress: Pointer; end; function TMyTestHelper.GetFooAddress: Pointer; var MethodPtr: procedure of object; begin MethodPtr := Self.Foo; Result := TMethod(MethodPtr).Code; end; function FooAddress: Pointer; begin Result := TTest(nil).GetFooAddress;//don't need to instantiate an object end;
将FooAddress的返回值传递给您的修补功能之一,您是金色的.
不过,从Delphi 10.1柏林开始,这不再奏效了!班级助理员不能再访问严格的受保护,严格的私人或私人会员.这个“功能”实际上是Embarcadero现在在柏林修复的编译器错误.你没有运气.