Sal*_*dor 15 delphi delphi-xe2
我已经阅读了这些问题和答案
但我不能弄清楚如何修补位于其他单元中的类的私有方法.
检查此示例我想修补Bar程序.
Unit ThidParty;
Interface
Type
TFoo =Class
private
procedure Bar;
end;
Run Code Online (Sandbox Code Playgroud)
我认为关键是找到一种方法来获取私有方法的地址.
那么,我如何修补delphi类的私有方法?
Dav*_*nan 23
下面概述的解决方案适用于包括Delphi Seattle在内的版本.您可以使用类助手来破解类:
单元1
type
TTest = class
private
procedure Foo;
end;
Run Code Online (Sandbox Code Playgroud)
单元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;
Run Code Online (Sandbox Code Playgroud)
将返回值传递FooAddress给您的一个修补函数,你就是金色的.
但是,从Delphi 10.1柏林开始,这已不再适用!类助手不能再访问严格受保护的严格私有或私有成员.这个"功能"实际上是Embarcadero现在在柏林修复的编译器错误.你运气不好.
| 归档时间: |
|
| 查看次数: |
4780 次 |
| 最近记录: |