Question

Quelqu'un at-il dans un cadre ou d'une bibliothèque pour Delphi pour simplifier la génération de code x86? Je ne suis pas à la recherche d'un assembleur, mais plutôt un cadre qui fait abstraction du processus de génération de code ci-dessus les bits de bas niveau et d'octets. Idéalement, je voudrais construire au-dessus d'une bibliothèque existante ou d'un cadre plutôt que hardcode la logique au cas par cas.

L'utilisation initiale sera de générer des petits bouts de code à l'exécution similaire à la façon dont Delphi envoie les requêtes SOAP. Si je ne peux pas trouver quelque chose que je vais rouler sans doute moi-même, mais je ne voudrais pas réinventer la roue. Quelque chose dans « C » pourrait me intéressant à condition que la licence permettra à la traduction et l'utilisation dans des projets commerciaux et open source.

Mise à jour:

Voici un peu plus contexte: Qu'est-ce que je travaille vers la mise en œuvre d'exécution est d'interfaces et / ou des classes dans le cadre d'un cadre de persistance. Quelque chose un peu comme l'annotation Java Persistence entraînée (JPA / EJB3) sauf avec une saveur nettement Delphi. L'objectif d'invocation est un cadre modulaire / extensible qui mettra en œuvre un modèle de persistance généralisée. Je dois expédier et les appels de méthode crochet basé sur RTTI et un modèle d'annotation / d'attributs (quelque chose de similaire aux métadonnées InstantObjects) d'une manière très dynamique et fluide.

Merci, David

Était-ce utile?

La solution

Selon les caractéristiques de paxCompiler , vous pouvez créer des fichiers exécutables se seuls.

Autres conseils

Plus j'ai pensé à votre question. Je ne sais pas si tout ce que vous essayez de le faire Méthode appel dynamique. Même si votre demande sur la génération de code x86. Il y a plusieurs techiniques qui font cela.

Si vous connaissez la signature de la méthode en question, vous pouvez le faire facilement en utilisant un TMethod et réglage de l'adresse de la méthode et des données.

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;

Si vous ne connaissez pas la signature de la méthode que vous pouvez écrire la classe avec {$ METHODINFO ON} Ensuite, utilisez la fonctionnalité dans ObjAuto.pas pour invoquer la méthode.

J'ai un exemple dans mon RTTI code Présentation de DelphiLive sur la façon de faire.

réponse Très spectulative: Quelque chose comme LLVM ? Je ne sais pas si elle peut être utilisée à partir delphi ou non, mais vous devriez être en mesure de créer dll wth il.

Logiquement vous suffit de générer un code delphi, compiler une DLL / compilateur par BPL cmdline puis chargez dyn que l'on?

Malheureusement, Delphi Explorer ne vient pas avec le compilateur cmdline bien. Et votre binaire principal devrait également être dans Delphi Explorer (ou au moins dans D2006 si cela est assez binaire compatible)

Toute combinaison de versions Delphi (ou Free Pascal) ne fonctionnera probablement pas sur l'emballage ou le niveau HLL, seulement au niveau de DLL de procédure de base.

Je viens de découvrir un cadre intéressant qui fait une grande partie de ce que je cherchais quand je la question à l'origine posté. Un peu en retard à mes fins, mais je pensais que quelqu'un d'autre pourrait trouver ce utile:

DAsmJit un port Delphi de projet asmjit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top