我想修补一个例程调用,以便能够通过一些修改自己处理它.我正在写一个资源加载器.我想修补Delphi的LoadResourceModule和InitInheritedComponent例程.我已经在MadExcept.pas单元中检查了PatchAPI调用,但如果我可以将其用于我的项目,则无法弄明白.
我想要类似的东西
我的exe在运行时调用 - > LoadResourceModule - >跳转到 - > MyCustomResourceModule ...
任何关于此的指针都会非常有帮助.
我需要访问一个严格的受保护属性,因为我需要创建一个验证(基于此属性的值)以避免错误.(我没有具有此属性的第三方类的源代码)只有我有类(接口)和dcu的定义(所以我无法更改属性可见性).问题是存在一种访问严格受保护财产的方法吗?(我真正读懂了Hallvard Vassbotn博客,但我不觉得这个特定主题参选.)
我有第三方功能
function DataCompare(const S1, S2: string; APartial: Boolean): Boolean;
begin
...
end;
Run Code Online (Sandbox Code Playgroud)
它用于另一个第三方单元.
我希望在运行时用另一个新实现替换函数体.
这可能吗?我想需要一些黑客(ala VirtualMemoryUnprotect).非汇编解决方案非常受欢迎.
我想使用Gabriel Corneanu的jpegex,jpeg.TJPEGImage的类助手.阅读这个和这个,我了解到,超过德尔福西雅图你不能访问私有字段不再像jpegex确实(在下面的例子中FDATA).和David Heffernan提出的VMT一样,远远超出我的范围.有没有更简单的方法来完成这项工作?
type
// helper to access TJPEGData fields
TJPEGDataHelper = class helper for TJPEGData
function Data: TCustomMemoryStream; inline;
procedure SetData(D: TCustomMemoryStream);
procedure SetSize(W,H: integer);
end;
// TJPEGDataHelper
function TJPEGDataHelper.Data: TCustomMemoryStream;
begin
Result := self.FData;
end;
Run Code Online (Sandbox Code Playgroud)