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 :

Création d'une DLL : incompréhension sur les chemins [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut Création d'une DLL : incompréhension sur les chemins
    Bonjour

    Je développe en Delphi depuis de nombreuses années et je jette aujourd'hui un coup d’œil à Lazarus par curiosité.

    Première expérience donc qui m'amène dès aujourd'hui à une première incompréhension.

    Création d'un nouveau Projet/Application.
    Je vois l'unité Dialogs dans les uses et je regarde son emplacement. Résultat :
    unit
    Dialogs

    E:\lazarus\lcl\dialogs.pp(17,6)

    Description

    Some dialogs commonly used in Lazarus applications. Look at the Procedures as well as the Classes

    Package

    LCLBase

    Création d'une bibliothèque (pour tenter une Dll)

    UNIT
    Dialogs

    E:\lazarus\fpc\3.0.4\source\packages\fv\src\dialogs.pas(28,6)

    Question : Pourquoi cette différence ?

    En fait, pour être plus précis, j'ai voulu faire un simple ShowMessage dans ma dll et malgré l'ajout de Dialogs, ça n'aboutissait à rien alors que ça fonctionnait dans un projet simple.

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour Papy

    Il faut faire la différence entre les unités de la FCL fournis avec le compilateur Free Pascal et les unitées provenant de Lazarus la LCL qui est équivalent à la VCL de delphi.

    Dans ton nouveau projet de DLL il te faut ajouter le paquet LCLBase ou LCL dans les dépendances. Pour ce faire menu --> Projet --> gestionnaire de projet dans la boite de dialogue qui s'ouvre fais un clique droit sur "paquet requis" --> ajouter pouis dans la nouvelle fenêtre choisis LCL ou LCLBase et voilà.

    Pour obtenir une interface proche de Delphi "moderne" un tutoriel va bientôt être publié. Tu sera un peu moins dépaysé.
    Pour convertir tes projets Delphi vers Lazarus Menu outils --> Conversion Delphi. Il faudra peut-être effectuer quelques changement dans le code (surtout pour les unités) suivant la complexité de tes projets mais rien d'insurmontable.

    Si tu as d'autres questions ou problèmes, n'hésites pas

    EDIT : L'unité E:\lazarus\fpc\3.0.4\source\packages\fv\src\dialogs.pas fait référence a FreeVision un clone de TurboVision de TP7 pour les applications en mode console
    Les unités de FPC peuvent être utilisées facilement sans l'EDI Lazarus. Les applications devront alors être compilées en ligne de commande

    A Bientôt
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Merci pour cette explication détaillée !

    Si j'ai bien compris, l'ajout de LCLBase prend le pas sur les unités "standards".

    Je repasserai surement pour d'autres questions sur les adaptations à faire sur les projets.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut suite ...
    Bon, j'ai un autre souci.
    Je fais une nouvelle dll et j'ajoute LCLBase.
    J'ajoute une unité au projet et je mets Dialogs dans les uses.
    A la compilation, ça donne :

    Compilation du projet - Cible : E:\TEMP\project1.dll : Code de sortie 1 - Erreurs : 49
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomImageList
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterMenuItem
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterMenu
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterMainMenu
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterPopupMenu
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterDragImageList
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterLazAccessibleObject
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterControl
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterWinControl
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterGraphicControl
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomControl
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterScrollingWinControl
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterScrollBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomFrame
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomForm
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterHintWindow
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomScrollBar
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomGroupBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomComboBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomListBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomEdit
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomMemo
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterButtonControl
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomButton
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomCheckBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterToggleBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterRadioButton
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomStaticText
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomLabel
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomBitBtn
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomSpeedButton
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterShape
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomSplitter
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterPaintBox
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomImage
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterBevel
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomRadioGroup
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomCheckGroup
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomLabeledEdit
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomPanel
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCustomTrayIcon
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterCommonDialog
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterFileDialog
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterOpenDialog
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterSaveDialog
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterSelectDirectoryDialog
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterColorDialog
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterColorButton
    project1.lpr(10,1) Error: Undefined symbol: WSRegisterFontDialog
    Manque-t-il encore autre chose ?

    Idem avec LCL au lieu de LCLBase

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Oui effectivement il te manque des choses. FPC et Lazarus sont multiplateformes et peuvent utiliser plusieurs interface graphique : windows, GTK, Carbon, Cocoa ect..Une bibliothèque (DLL sous windows) à la base n'est pas prévu pour stocker des éléments visuels. Le fait de l'ajout de l'unité Dialogs, il faut également définir qu'elle interface graphique elle doit utiliser.

    Pour déclarer ces "interfaces" il faut rajouter l'unité interface au début de la clause uses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    uses
       Interfaces, Classes, dialogs
    Pour choisir l'interface à utiliser il faut aller dans les options du projets section "Ajouts et remplacement" et cliquer sur le bouton "Définir "LCLWidgetsType""
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Tout d'abord, merci pour l'aide que j'apprécie beaucoup.

    J'ai ajouté Interfaces dans les uses.
    Pour LCLWidgetsType le choix n'est pas actif.
    Et je tombe encore sur un problème.

    Nom : 2018-08-09_102032.jpg
Affichages : 621
Taille : 198,1 Ko

    Est-ce qu'il y a quelque part un tutoriel pour expliquer tout ça afin que j'évite de trop poser de question ici ??

    Solution : En plus de LCLBase, j'ai ajouté LCL et ça fonctionne. Je pensais que l'un valait l'autre mais apparemment ce n'est pas le cas.

    Pas simples les débuts

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'une DLL sans les sources (.c)
    Par joks93440 dans le forum Débuter
    Réponses: 10
    Dernier message: 12/11/2013, 17h06
  2. [JFileChooser] Une petite question sur les chemins par defaut
    Par MDP dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/02/2008, 14h49
  3. CR10 : insérer une page blanche sur les ruptures pages paire
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 07/09/2005, 18h09
  4. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24

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