IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sepi Discussion :

Interpréter directement un script, sans passer par un fichier


Sujet :

Sepi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Interpréter directement un script, sans passer par un fichier
    Mon français n'est pas parfait, donc je vais parler anglais.

    First of all, I would like to say Sepi is a very nice and promising project
    I followed your guide to compile the latest version (got it from SourceForge SVN) on Delphi 2007. The problem is that it does compile, but the unit importer fails (it gives me an error that it can't find an entrypoint for a procedure in SepiReflection110.bpl). I compiled the rest of the library without the imports (commented those out) and that worked fine.

    I want to make a program that interprets Delphi code without having to compile it first to a file (like Remobjects Pascal Script does). Is this possible? If so, how would I do such a thing? I tried to do it myself, but got an error on calling the "main function".

    Also, do you think it is possible to port this project to Lazarus?

    Thanks in advance,
    Nielsie95

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Bonjour,

    Je voudrais d'abord signaler que le forum étant francophone, il est demandé que les messages soient écrits en français. Même si tu fais des fautes, personne ne t'en tiendras rigueur.

    Je vais donc répondre en français. Je suis néanmoins joignable en anglais par e-mail, si nécessaire.
    Citation Envoyé par nielsie95 Voir le message
    First of all, I would like to say Sepi is a very nice and promising project
    Merci
    Citation Envoyé par nielsie95 Voir le message
    I followed your guide to compile the latest version (got it from SourceForge SVN) on Delphi 2007. The problem is that it does compile, but the unit importer fails (it gives me an error that it can't find an entrypoint for a procedure in SepiReflection110.bpl). I compiled the rest of the library without the imports (commented those out) and that worked fine.
    Hum, c'est bizarre. Il se pourrait que ton path système ne contienne pas le dossier dans lequel Delphi stocke les .bpl. Cela dit, tu dois pouvoir contourner le problème en compilant l'importeur sans l'option "Compiler avec les paquets d'exécution" du menu Projet > Options.
    Citation Envoyé par nielsie95 Voir le message
    I want to make a program that interprets Delphi code without having to compile it first to a file (like Remobjects Pascal Script does). Is this possible? If so, how would I do such a thing? I tried to do it myself, but got an error on calling the "main function".
    En théorie, c'est possible, oui. Il faudrait alors compiler vers un TMemoryStream, puis réutiliser le même stream comme argument de TSepiRuntimeUnit.Create.

    Pour compiler vers un TMemoryStream, il faut écrire une variante de SepiCompilerUtils.CompilerSepiSource (dans le dossier source\run\SepiCompiler).

    Pour créer l'unité à partir du memory stream, il suffit de faire
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure ExecuteMain(ScriptStream: TStream);
    const 
      MainMethodName = 'Main'; 
    var 
      SepiRoot: TSepiRoot; 
      RuntimeUnit: TSepiRuntimeUnit;
      SepiUnit: TSepiUnit; 
      MainMethod: TSepiMethod; 
      EntryPoint: TProcedure; 
    begin 
      SepiRoot := TSepiRoot.Create; 
      try 
        RuntimeUnit := TSepiRuntimeUnit.Create(SepiRoot, ScriptStream);
        SepiUnit := RuntimeUnit.SepiUnit;
        MainMethod := SepiUnit.FindComponent(MainMethodName) as TSepiMethod; 
        EntryPoint := TProcedure(MainMethod.Code); 
        EntryPoint; 
      finally 
        SepiRoot.Free; 
      end; 
    end;
    Il est nécessaire d'utiliser des SepiRoot séparés pour la compilation et pour l'exécution. (Ou au moins utiliser des forks séparés, mais c'est compliqué à utiliser correctement.)
    Citation Envoyé par nielsie95 Voir le message
    Also, do you think it is possible to port this project to Lazarus?
    Pas dans l'immédiat. Je ne connais pas suffisamment les détails d'implémentation de FreePascal, ne l'ayant jamais utilisé. Je le ferai un jour, c'est sûr. Mais quand ? Ca je n'en sais rien.

    Merci encore pour votre intérêt pour Sepi
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    If English really is a big problem on the forums, I'll ask any further questions through mail/pm.

    It works now, thank you I must say it performs very well compared to Pascal Script (speed wise, but also feature wise), so thanks again for your hard work!

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par nielsie95 Voir le message
    I must say it performs very well compared to Pascal Script (speed wise, but also feature wise)
    C'est amusant, je me serais attendu à l'ordre inverse, i.e. "non seulement au niveau des fonctionnalités, mais aussi de la vitesse".

    En effet, Sepi a été développé pour les fonctionnalités, qui devaient pallier au manque de fonctionnalités de Pascal Script et Scripter Studio. La vitesse n'est qu'un effet "du hasard" que je n'avais même pas prémédité Mais bon c'est vrai que Pascal Script a une implémentation qui n'encourage pas la vitesse.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2011, 13h24
  2. Requeter ORACLE sans passer par un fichier .dqy
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/02/2008, 10h36
  3. execution de requete sans passer par un fichier sql
    Par funboard dans le forum Oracle
    Réponses: 5
    Dernier message: 11/12/2007, 10h31
  4. Afficher un jpg sans passer par un fichier jpg
    Par gloubi dans le forum Langage
    Réponses: 15
    Dernier message: 14/06/2007, 16h27
  5. Réponses: 8
    Dernier message: 15/04/2007, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo