有没有人遇到过Delphi的框架或库来简化x86代码的生成?我不是在寻找汇编程序,而是在低级别位和字节之上抽象代码生成过程的框架。理想情况下,我希望建立在现有库或框架之上,而不是根据具体情况对逻辑进行硬编码。
最初的用法是在运行时生成小代码存根,类似于Delphi调度SOAP请求的方式。如果我找不到东西,我可能会自己动手,但我不想重新发明轮子。如果许可证允许在商业和开源项目中进行翻译和使用,那么“C”中的某些内容可能会让我感兴趣。
更新
以下是更多上下文:我正在努力的是作为持久性框架的一部分的接口和/或类的运行时实现。类似于Java注释驱动的持久性(JPA / EJB3),除了具有明显的Delphi风格。调用目标是一个模块化/可扩展的框架,它将实现一个通用的持久性模型。我需要以非常动态和流畅的方式调度和挂钩基于RTTI的方法调用和注释/属性模型(类似于InstantObjects元数据)。
谢谢, 大卫
答案 0 :(得分:5)
我对你的问题的思考越多。我不确定你是否只想做动态方法调用。即使您询问有关生成x86代码的问题。 有几种技术可以做到这一点。
如果您知道相关方法的签名,可以使用a轻松完成 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 Presentation code中有一个关于如何做到这一点的例子。
答案 1 :(得分:2)
根据PaxCompiler的功能,您可以创建独立的可执行文件。
答案 2 :(得分:2)
非常投机的答案: 像LLVM这样的东西?我不确定它是否可以在delphi中使用,但你应该可以用它来创建dll。
答案 3 :(得分:0)
逻辑上你只需生成delphi代码,通过cmdline编译器编译成DLL / BPL然后dyn加载那个?
不幸的是,Delphi Explorer没有附带cmdline编译器。你的主二进制文件也必须在Delphi Explorer中(或者至少在D2006中,如果它足够二进制兼容)
Delphi版本(或Free Pascal)的任何组合都可能无法在包或HLL级别上运行,只能在基本的过程DLL级别上运行。
答案 4 :(得分:0)
我刚刚发现了一个有趣的框架,它在我最初发布问题时完成了我所寻找的大部分工作。对于我的目的来说有点晚了,但是认为其他人可能觉得这很有用:
的Delphi端口