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

  1. #1
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    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
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    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 émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    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 émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    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
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    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 émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    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 : 537
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

  7. #7
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Je n'avais pas fait attention dans ton 1er post que tu avais créé un application. Confirmé sur ta copie d'ecran c'est que tu n'as pas créé une bibliothèque mais une application, ni une application graphique, mais une application console.

    Qu'elle est la version de Lazarus que tu as installé ?

    Il n'y a pas de de réel tutoriel sur le sujet des bibliothèques. Tout fois tu peux feuilleter les quelques tutoriel sur lazarus ici

    Je vais te détailler la procedure basique à suivre pour créer une bibliothèque DLL pour windows

    1) Menu fichier --> Nouveau --> Choisir bibliothèque

    Tu te retrouves devant ce code, contenu dans les fichier Project1.LPR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    library Project1;
     
    {$mode objfpc}{$H+}
     
    uses
      Classes
      { you can add units after this };
     
    begin
    end.
    2) Vue que tu souhaites utiliser des éléments de la LCL, dans la ta de DLL de test (sinon mieux vaut utiliser les APIs du système)
    Ajoutes la dépendances LCL dans le projet comme je l'ai décrit précédemment.

    3) Le code :
    3.1)Ajoutes les unités Interfaces et Dialogs

    Pas besoins d'aller dans les options pour choisir les LCLWidgets à utiliser. Ceux de la plateforme par défaut seront automatiquement utilisés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Uses 
      Interfaces, Classes, Dialogs
    Notes il est très important de déclarer l'unité Interfaces en premier

    3.2) Ajout et export de la fonction ou procedure

    Code : 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
    library DLLTest;
     
    {$mode objfpc}{$H+}
     
    uses
      Interfaces, Classes, Dialogs
      { you can add units after this };
     
      // Code de la procedure
      procedure Toto;
      begin
        ShowMessage('TOTO');
      end;
     
    exports Toto;   // Declaration de la procedure à exporter dans la DLL
     
    end.
    Sauvegardes ce projet sous le même nom que la librairie ici "DLLTest"

    Appuye sur CTRL+F9 (Menu Exécuter --> Créer)

    4) Utilisation de la DLL dans une application

    4.1) Menu Fichier --> Nouveau --> Application
    Ajoutes l'unité DynLibs dans les uses
    Ajoutes un bouton sur la fiche et un événement OnClick
    Enregistres le projet sous TestDLL et uMainForm.pas dans le même dossier que la DLL

    4.2) Le code :

    Code : 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
    unit uMainform;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, DynLibs;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    Type
      // Declaration de la forme des fonctions et procedure contenus dans la DLL
      TMyDLLProc = procedure(); stdCall;  //cdecl pour unix
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyDLLHandle : TLibHandle;
      MyDLLProc : TMyDLLProc;
    begin
      // Chargement dynamique de la DLL
      MyDLLHandle := SafeLoadLibrary('DLLTest.dll');
      if (MyDLLHandle <> 0) then
      begin
        // Chargement de la procedure
        MyDLLProc :=  TMyDLLProc(GetProcedureAddress(MyDLLHandle,'Toto'));
        if Assigned(MyDLLProc) then
        begin
          MyDLLProc();   // Execution de la procedure Toto de la DLL
        end
        else
        begin
          ShowMessage('Procedure Toto introuvable');
        end;
        FreeLibrary(MyDLLHandle);
      end
      else
      begin
        ShowMessage('Erreur DLL impossible à charger');
      end;
    end;
     
    end.
    Notes, avec une application graphique, tu n'as pas besoins de rajouter les dépendances LCL. C'est automatique. Pour l'unité interface celle-ci est déja déclarée dans les sources du projet (fichier lpr)

    Enregistres le projet et exécutes le

    Resultat

    Nom : 2018-08-09_114951.png
Affichages : 505
Taille : 5,9 Ko

    Voici une petite capture d'ecran vite fait sur la boite de dialogue de création d'application

    Nom : 2018-08-09_111629.png
Affichages : 547
Taille : 34,7 Ko
    • "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

  8. #8
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Merci à nouveau.

    C'est bien une dll que je tente de faire. Le message d'erreur de compilation indique bien qu'il tente de construire MaDll.dll

    Interfaces est bien placé en premier.

    Ma dll a bien réussi à se créer mais j'ai voulu faire un premier test en tentant de l'utiliser depuis 3 lignes de code en Delphi et là, ça coince.
    J'arrive à charger la dll mais pas à trouver ma procedure.
    Procedure qui est bien exportée après vérification avec l'utilitaire DllExports.
    J'imagine que je ne dois pas utiliser la bonne convention d'appel malgré mes différents tests avec cdecl et stdcall

    Je vais faire un test en l'appelant depuis du code LAzarus en suivant ton exemple et voir le résultat.

    Je vais creuser un peu tout ça et je reviendrai ici pour d'autres précisions en cas de besoin.

  9. #9
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Avec Delphi la procedure pour charger la DLL n'est pas tout à fait la même.

    Voila le code que je viens de tester avec Delphi CE et qui fonctionne parfaitement avec la DLL générée depuis Lazarus

    Code : 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
     
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    Type
      TMyDLLProc = Procedure();
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      MyDLLHandle : THandle;
      MyDLLProc : TMyDLLProc;
    begin
      // Chargement dynamique de la DLL
      MyDLLHandle := LoadLibrary('DLLTest.dll');
      if (MyDLLHandle <> 0) then
      begin
        // Chargement de la procedure
        @MyDLLProc :=  GetProcAddress(MyDLLHandle,'Toto');
        if Assigned(MyDLLProc) then
        begin
          MyDLLProc();   // Execution de la procedure Toto de la DLL
        end
        else
        begin
          ShowMessage('Procedure Toto introuvable');
        end;
        FreeLibrary(MyDLLHandle);
      end
      else
      begin
        ShowMessage('Erreur DLL impossible à charger');
      end;
    end;
     
    end.
    Une chose à laquelle tu doit faire attention c'est la plateforme cible de compilation si Lazarus est en 64bits la DLL sera donc en 64Bits il faudra donc sous Delphi également choisir le mode 64bits pour la compilation de ton projet
    • "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

  10. #10
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    En Delphi, je fais comme toi. J'ai l'habitude du langage.

    Je suis sur un Windows 7 64 bits et j'ai installé Lazarus 64bits.
    J'ai voulu modifier la cible en win32 mais quand je ferme les options, j'ai le message :

    [Window Title]
    Attention

    [Content]
    Le FPC en cours n'a pas de fichier de configuration. Il va probablement manquer quelques unités. Vérifiez votre installation de FPC.

    [OK] [Ignorer]

    Alors j'ai tout laissé en cible par défaut.
    Donc, j'imagine que ça m'a généré une dll 64bits.
    Et dans Delphi Berlin, j'ai mis une configuration de projet win64.

    Je vais retenter une construction.

  11. #11
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    J'ai forcé l'OS en win64 et le CPU cible en x86_64 et j'ai retenté avec Delphi et cette fois ça passe bien.

    Je vois qu'il me reste pas mal de choses à apprendre rien que sur la configuration d'un projet

    Il ne me reste plus qu'à me mettre au boulot.

    Merci encore.

  12. #12
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Pour pouvoir compiler en 32bits avec Lazarus
    1) Tu installes une deuxieme instance de Lazarus 32bits
    2) Tu installes le compilateur FPC en 32bits via le fichier d'installation dédié a la cross-compilation disponible sur le SourceForge de Lazarus
    3) Tu peux utiliser FPCUpDeluxe pour installer Lazarus et les outils de cross-compilation. Pour ce faire, tu peux suivre mon tutoriel : Installer Lazarus et des paquets avec FPCUpDeluxe et Online Package Manager

    A bientôt et pas de soucis pour l'aide
    • "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

  13. #13
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Pour la cross-compilation et une aide rapide tu peux consulter ce topic
    • "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

+ 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