我已阅读这些问题和答案
但我无法弄清楚如何修补位于另一个单元中的类的私有方法。
检查此示例我要修补Bar
程序。
Unit ThidParty;
Interface
Type
TFoo =Class
private
procedure Bar;
end;
我认为哪个关键是找到获取私有方法地址的方法。
那么,如何修补 delphi 类的私有方法?
我已阅读这些问题和答案
但我无法弄清楚如何修补位于另一个单元中的类的私有方法。
检查此示例我要修补Bar
程序。
Unit ThidParty;
Interface
Type
TFoo =Class
private
procedure Bar;
end;
我认为哪个关键是找到获取私有方法地址的方法。
那么,如何修补 delphi 类的私有方法?
下面概述的解决方案适用于 Delphi Seattle 及之前的版本。您可以使用类助手来破解类:
单元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 Berlin 开始,这不再有效!类助手不能再访问严格保护、严格私有或私有成员。这个“功能”实际上是 Embarcadero 现在在柏林修复的编译器错误。你运气不好。