4

有没有人遇到过 Delphi 的框架或库来简化 x86 代码的生成?我不是在寻找一个汇编器,而是一个将代码生成过程抽象到低级位和字节之上的框架。理想情况下,我想在现有库或框架之上构建,而不是根据具体情况对逻辑进行硬编码。

最初的用途是在运行时生成小的代码存根,类似于 Delphi 分派 SOAP 请求的方式。如果我找不到东西,我可能会自己动手,但我不想重新发明轮子。如果许可证允许在商业和开源项目中翻译和使用,那么“C”中的某些内容可能会让我感兴趣。

更新:

这里有一些更多的上下文:我正在努力将接口和/或类的运行时实现作为持久性框架的一部分。有点像 Java 注释驱动的持久性 (JPA/EJB3),除了具有明显的 Delphi 风格。调用目标是一个模块化/可扩展的框架,它将实现一个通用的持久性模型。我需要以非常动态和流畅的方式调度和挂钩基于 RTTI 和注释/属性模型(类似于 InstantObjects 元数据)的方法调用。

谢谢,大卫

4

5 回答 5

5

我对你的问题想得越多。我不确定您是否只是尝试进行动态方法调用。即使您询问有关生成 x86 代码的问题。有几种技术可以做到这一点。

如果您知道相关方法的签名,您可以通过使用 TMethod 并设置方法地址和数据来轻松完成。

procedure TForm8.Button1Click(Sender: TObject);
begin
  Showmessage('Hello1');
end;

procedure TForm8.Button2Click(Sender: TObject);
var
 M : TMethod;
begin
  M.Code := MethodAddress('Button1Click');
  M.Data := Self;
  TNotifyEvent(M)(self);
end;

如果您不知道方法签名,您可以使用 {$METHODINFO ON} 编写类,然后使用 ObjAuto.pas 中的功能来调用该方法。

我在DelphiLive 的RTTI 演示代码中有一个示例,说明如何做到这一点。

于 2009-05-29T05:03:10.100 回答
2

根据PaxCompiler的特性,您可以创建独立的可执行文件。

于 2009-05-29T06:16:16.320 回答
2

非常投机的答案:像LLVM之类的东西?我不确定它是否可以从 delphi 中使用,但是您应该能够使用它创建 dll。

于 2009-05-29T07:25:37.737 回答
0

从逻辑上讲,您只需生成 delphi 代码,通过 cmdline 编译器编译为 DLL/BPL,然后动态加载该代码?

不幸的是,Delphi Explorer 并没有附带 cmdline 编译器。而且您的主要二进制文件也必须在 Delphi Explorer 中(或者至少在 D2006 中,如果它足够兼容二进制文件)

Delphi 版本(或 Free Pascal)的任何混合都可能无法在包或 HLL 级别上工作,只能在基本的过程 DLL 级别上工作。

于 2009-05-29T09:52:28.673 回答
0

我刚刚发现了一个有趣的框架,它可以完成我最初发布问题时所寻找的大部分内容。对于我的目的来说有点晚了,但认为其他人可能会觉得这很有用:

DAsmJit asmjit 项目的 Delphi 端口

于 2011-10-31T03:20:02.230 回答