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

Lazarus Pascal Discussion :

Equivalent des BPL de Delphi


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 12
    Par défaut Equivalent des BPL de Delphi
    Salut

    Je viens du monde de Delphi et je voudrais faire un logiciel avec des modules codés dans des paquets dynamiques (packages).

    J'ai pensé dans un premier temps utiliser des dll, mais j'ai lu que c'était impossible d’intégrer des fiches dans les dll qui puissent interagir avec l'application maître (appelante).

    J'aimerais donc savoir s'il n'y a pas d'équivalent des bpl de Delphi dans Lazarus.

    J'ai bien essayé avec les lpk mais j'ai constaté que Lazarus les intègre directement dans l'exe.

    Merci de vos apports.

    Je suis en Lazarus 1.0.8 et Windows 8.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par usmarshall Voir le message
    Salut
    Je viens du monde de Delphi et je voudrais faire un logiciel
    avec des modules codés dans des paquets dynamiques (packages).

    J'ai pensé dans un premier temps utiliser des dll, mais j'ai lu
    que c'était impossible d’intégrerJ des fiches dans les dll qui
    puisse interagir avec l'application maître (appelante).
    Le propre d'une dll, c'est de pouvoir interagir avec une application maître (un exécutable, voire une autre dll), à condition que la dite dll fournisse une interface adéquate.
    Les BPL de Delphi ne sont rien d'autres que des dll standards auxquelles ont été rajouté des "petits" traitements additionnels (Initialize, Finalize) pour l'interaction directe avec les objets des paquets, mais il faut qu'exécutable et dll soient compilés avec la même version du compilateur...
    Citation Envoyé par usmarshall Voir le message
    J'aimerais donc savoir s'il n'y a pas d'équivalent des bpl de delphi dans Lazarus.
    Les dll (.so sous Linux) ! en fournissant une interface adéquate pour tous les échanges envisagés entre l'application ou la dll appelante et la dll appelée...
    Citation Envoyé par usmarshall Voir le message
    J'ai bien essayé avec les lpk mais j'ai constaté que Lazarus les intègre directement dans l'exe.
    Les paquets Lazarus sont prévus pour l'EDI et leur intégration se fait de manière statique d'où recompilation... Ce n'est pas la même approche que pour Delphi.
    Plus de détails : Les paquets Lazarus

    Ensuite, y a-t-il un intérêt à avoir une dll pour les applications que vous envisagez de faire, hormis conserver certaines habitudes acquises avec Delphi ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 12
    Par défaut Réduire la taille de l'exe
    En fait je suis en train de faire un erp.
    Et les module vont être nombreux ...

    Mon objectif est de pouvoir diminuer la taille de l'exe et de pouvoir faire des mises à jour ciblées de mon logiciel et ainsi avoir un système de plugins performants.

    Je n'hésiterais pas à utiliser des dll mais je ne sais pas comment intégrer des fiches dans les dll qui interagissent avec le logiciel maître.

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par usmarshall Voir le message
    En fait je suis en train de faire un erp.
    Et les module vont être nombreux ...
    Indépendants ? optionnels ?
    Citation Envoyé par usmarshall Voir le message
    Mon objectif est de pouvoir diminuer la taille de l'exe et de pouvoir faire des mises à jour ciblées de mon logiciel et ainsi avoir un système de plugins performants.
    La taille de l'exécutable augmentera de manière plus logarithmique qu'exponentielle.
    Aussi, je ne suis pas certain que le gain de taille sur l'exécutable l'emporte sur la gestion fine qu'il va falloir faire pour les tests fonctionnels, les mises à jours, surtout si les modules peuvent être interdépendants...

    Personnellement, je partirais pour un exécutable, dont les modules peuvent être compilés optionnellement. Avec un système de build automatique (Ant ou autre), cela me parait nettement plus jouable et moins risqué...
    Citation Envoyé par usmarshall Voir le message
    Je n'hésiterais pas à utiliser des dll mais je ne sais pas comment intégrer des fiches dans les dll qui interagissent avec le logiciel maître.
    En créant les fonctions et procédures qui serviront d'interface à l'application... Pas trivial, mais pas insurmontable.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 12
    Par défaut Compilation optionnelle? Ant?
    Il est vrai que je ne suis pas très avancé en POO pour utiliser les interfaces...

    La solution Ant m'intéresse (je ne connaissais pas) mais selon mes recherches
    dans Google, c'est utilisé avec Eclipse ou Netbeans pour le développement Java.

    Si ça peut s'utiliser avec lazarus, puis-je avoir des liens de tutos?

  6. #6
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour

    Je plussoie ce que dit Ph.B. !

    Il est avéré que, si on prend soin de factoriser avec des composants dans des paquets le plus possible de code commun, la taille et le temps de compilation d'un ERP n'augmente que très lentement avec le nombre de fonctionnalités et la complexité.

    Par contre, je connais plusieurs ERP (non écrits avec Lazarus) dans lesquels la gestion des modules est un enfer, qui les rend instables, ou en tous cas très compliqués à installer et utiliser. Au minimum, un très gros travail est nécessaire pour que cela soit vivable.

    C'est un grand atout de FPC et Lazarus de pouvoir livrer beaucoup de fonctionnalités dans un .exe unique, de taille raisonnable.

    Donc, certes, on peut envisager de faire des modules indépendants, mais il faut être vraiment très avancé pour que ce soit indispensable, et on peut couvrir beaucoup de besoins sans cela.

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par usmarshall Voir le message
    Il est vrai que je ne suis pas très avancé en POO pour utiliser les interfaces...
    Je ne parle pas d'interfaces au sens TInterfacedObject... mais plutôt de fournir les procédures et fonctions qui permettront d'accéder et piloter les objets inclus dans la dll (clause exports de la dll).

    Citation Envoyé par usmarshall Voir le message
    La solution Ant m'intéresse (je ne connaissais pas) mais selon mes recherches
    dans Google, c'est utilisé avec Eclipse ou Netbeans pour le développement Java.

    Si ça peut s'utiliser avec lazarus, puis-je avoir des liens de tutos?
    Ça peut s'utiliser avec n'importe quel environnement qui offre les outils utilisables en ligne de commandes (donc Delphi, Lazarus, FPC, etc).

    Il faut partir de l'aide qui est fourni avec Ant qui indique comment alimenter les fichiers de "build" et comment les appeler.

    Ci après une exemple (avec Delphi 7 et Innosetup) qui réalisait pour une application TOTO :
    1. l’initialisation (suppression des fichiers antérieurs)
    2. la compilation des ressources par pays et la génération de dll correspondante (texte et images)
    3. la mise en place du fichier include des options(mono ou multilingue, version web téléchargeable), la compilation des exécutables suivant ces options et la génération des outils d'installation

    Le tout avec un fichier de log pour contrôler le bon (ou mauvais) fonctionnement...
    Code xml : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <project name="TOTO" default="toto_clean" basedir="..\..">
      <description>
        Generation des installeurs de l'outil TOTO
      </description>
      <!-- Emplacement des dossiers de travail -->
      <property name="dist" location="${basedir}\_Installs"/>
      <property name="common" location="${basedir}\Communs"/>
      <property name="src" location="${basedir}\TOTO"/>
      <property name="bin" location="${basedir}\TOTO\Bin"/>
      <!-- Emplacement des applications utilisees -->
      <property name="delphi" location="C:\Program Files\Borland\Delphi7\Bin"/>
      <property name="innosetup" location="C:\Program Files\Inno Setup 5"/>
      <!-- Emplacement et nom de fichier global -->
      <property name="logfile" location="${dist}\TOTO.log"/>
     
      <target name="toto_init" description="Initialisation">
        <echo message="Generation des differents programmes d'installation de TOTO..."/>
        <delete file="${logfile}"/>
        <delete>
          <fileset dir="${dist}" includes="TOTO_*.EXE" casesensitive="false"/>
        </delete>
      </target>
     
      <target name="toto_dlls" depends="toto_init" description="Generation des dlls">
        <delete>
          <fileset dir="${src}" includes="TOTO_*.RES" casesensitive="false"/>
        </delete>
        <echo message="Compilation des ressources en francais..."/>
        <exec dir="${src}" executable="${delphi}\BRCC32.exe" 
              output="${logfile}" failonerror="true">
          <arg line="TOTO_Fra.rc"/>
        </exec>
        <echo message="Generation de la dll de ressources en francais..."/>
        <exec dir="${src}" executable="${delphi}\DCC32.exe" 
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Fra.dpr -N${bin} -E${bin}"/>
        </exec>
        <echo message="Compilation des ressources en anglais..."/>
        <exec dir="${src}" executable="${delphi}\BRCC32.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Eng.rc"/>
        </exec>
        <echo message="Generation de la dll de ressources en anglais..."/>
        <exec dir="${src}" executable="${delphi}\DCC32.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Eng.dpr -N${bin} -E${bin}"/>
        </exec>
      </target>
     
      <target name="toto_fra" depends="toto_init,toto_dlls" description="Generation de TOTO_Fra_Install.exe" >
        <echo message="Generation du fichier des options pour la compilation du projet..."/>
        <copy file="${common}\Options_S_Fra.inc" tofile="${common}\Options.inc" overwrite="true"/>
        <echo message="Compilation du projet..."/>
        <exec dir="${src}" executable="${delphi}\DCC32.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line='TOTO.dpr -N${bin} -E${bin} -U"C:\Program Files\Borland\Delphi7\Philippe"'/>
        </exec>
        <echo message="Generation du programme d'installation par InnoSetup..."/>
        <exec dir="${src}\Install" executable="${innosetup}\ISCC.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Fra.iss"/>
        </exec>
      </target>
     
      <target name="toto_ang" depends="toto_init,toto_dlls" description="Generation de TOTO_Ang_Install.exe" >
        <echo message="Generation du fichier des options pour la compilation du projet..."/>
        <!-- Generation du fichier Options.inc -->
        <copy file="${common}\Options_S_Ang.inc" tofile="${common}\Options.inc" overwrite="true"/>
        <echo message="Compilation du projet..."/>
        <exec dir="${src}" executable="${delphi}\DCC32.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line='TOTO.dpr -N${bin} -E${bin} -U"C:\Program Files\Borland\Delphi7\Philippe"'/>
        </exec>
        <echo message="Generation du programme d'installation par InnoSetup..."/>
        <exec dir="${src}\Install" executable="${innosetup}\ISCC.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Ang.iss"/>
        </exec>
      </target>
     
      <target name="toto_fra_ang" depends="toto_init,toto_dlls" description="Generation de TOTO_Fra_Ang_Install.exe" >
        <echo message="Generation du fichier des options pour la compilation du projet..."/>
        <copy file="${common}\Options_S_Fra_Ang.inc" tofile="${common}\Options.inc" overwrite="true"/>
        <echo message="Compilation du projet..."/>
        <exec dir="${src}" executable="${delphi}\DCC32.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line='TOTO.dpr -N${bin} -E${bin} -U"C:\Program Files\Borland\Delphi7\Philippe"'/>
        </exec>
        <echo message="Generation du programme d'installation par InnoSetup..."/>
        <exec dir="${src}\Install" executable="${innosetup}\ISCC.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Fra_Ang.iss"/>
        </exec>
      </target>
     
      <target name="toto_fra_ang_web" depends="toto_init,toto_dlls" description="Generation de TOTO_Install.exe (version web)" >
        <echo message="Generation du fichier des options pour la compilation du projet..."/>
        <copy file="${common}\Options_S_Fra_Ang.inc" tofile="${common}\Options.inc" overwrite="true"/>
        <echo message="Compilation du projet..."/>
        <exec dir="${src}" executable="${delphi}\DCC32.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line='TOTO.dpr -N${bin} -E${bin} -U"C:\Program Files\Borland\Delphi7\Philippe"'/>
        </exec>
        <echo message="Generation du programme d'installation par InnoSetup..."/>
        <exec dir="${src}\Install" executable="${innosetup}\ISCC.exe"
              output="${logfile}" append="true" failonerror="true">
          <arg line="TOTO_Fra_Ang_Web.iss"/>
        </exec>
      </target>
     
      <target name="toto_clean" depends="toto_fra,toto_ang,toto_fra_ang,toto_fra_ang_web"
            description="Nettoyage de l'environnement" >
        <echo message="Nettoyage de l'environnement..."/>
        <copy file="${common}\OptionsRef.inc" tofile="${common}\Options.inc" overwrite="true"/>
      </target>
     
    </project>
    La commande de lancement : ANT TOTO.xml

    Le tout avec l'ensemble des fichiers dans l'arborescence adéquate :
    • TOTO\Aide (Ici les fichiers d'aide inclus avec l'application)
    • TOTO\Bin (Ici, les binaires générés)
    • TOTO\INSTALL\TOTO.xml (Ici, le fichier ANT et les scripts Innosetup)
    • TOTO\ (Ici les sources de l'application)

    Voila pour l'exemple, on pourrait y rajouter :
    • la récupération des sources auprès d'un gestionnaire de sources
    • la génération et l'exécution des tests unitaires
    • la génération des fichiers d'aide
    • la mise à disposition des installeurs sur un serveur Web ou FTP
    • les notifications (envoi de mail, etc)


    Au final, un ordinateur va réaliser en 30 minutes (ça fait ronfler les ventilateurs ) ce qui serait fait à la mimine en 1 journée et encore sans garantie d'absence d'erreur...

  8. #8
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour,

    Pour construire un projet Lazarus avec une configuration donnée, préalablement créée dans les options, et donc des options et directives variables, il suffit d'un petit fichier de commande, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    G: 
    CD G:\ 
    if not Exist toto.exe del toto.exe 
    C:\lazarus\lazbuild toto.lpi -Br --build-mode=un_mode 
    pause
    Le fichier de commande ou sa ligne lazbuild peuvent sûrement être appelés par ANT pour faire quelque chose de tout à fait professionnel, mais il peut aussi suffire d'enchaîner avec innosetup ou autre.

Discussions similaires

  1. Delphi 7 cherche des bpl inconnues
    Par peter27x dans le forum Débuter
    Réponses: 0
    Dernier message: 08/01/2009, 14h05
  2. [plugins] Equivalent des Live Templates dans Intellij
    Par rozwel dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/02/2005, 06h37
  3. [Plugin][.NET]equivalent des #region ?
    Par Reta dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/07/2004, 14h24
  4. Equivalent des Spin en C ?
    Par elsargento dans le forum C
    Réponses: 10
    Dernier message: 06/11/2003, 14h58
  5. Equivalent des SHOW de MySQL
    Par YanK dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/10/2003, 09h15

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