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 :

[0.9.25/Win32] Section Initialization dans une librairie Win32 [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [0.9.25/Win32] Section Initialization dans une librairie Win32
    Bonjour,

    Une fonction de mon code produit des N° de licences aléatoires. Le randomize est déclaré en début de programme. cela fonctionne. J'ai transféré cette fonction dans une librairie (.dll) appelée par le programme. Le randomize ne fonctionne plus. Il semble que vue de la librairie, la graine du randomize soit vide. J'ai donc incorporé le randomize dans la librairie dans une section initialization. Le résultat est probant... sauf que la dll construite par lazarus n'est plus le fichier bibli.dll mais un fichier bibli.exe. En renommant bibli.exe en bibli.dll, cela fonctionne. C'est visiblement cette partie initialization qui engendre le problème...

    Voici un extrait du 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
    library bibli;
     
    {$mode objfpc}{$H+}
     
    uses
      Classes,
      { you can add units after this }
      SysUtils,
      StrUtils;
     
    function AleaLICENCE():Pchar;cdecl; //ou stdcall;
    begin
    ...
    end;
     
    exports
      AleaLICENCE;
     
    //La présence de la section initialization fait générer la dll en exe ?
    initialization
      Randomize;
     
    {$IFDEF WINDOWS}{$R bibli.rc}{$ENDIF}
     
    //begin
    end.
    Pour pouvoir construire sans erreur avec la section initialization, il faut commenter le begin "final".

    Pour info
    ppa.bat si pas {$IFDEF WINDOWS}{$R bibli.rc}{$ENDIF}

    @echo off
    d:\lazarus0925\fpc\2.2.3\bin\i386-win32\windres.exe --include d:\lazarus0925\fpc\2.2.3\bin\i386-win32\ -O res -o sdsql.res sdsql.rc --preprocessor=d:\lazarus0925\fpc\2.2.3\bin\i386-win32\cpp.exe
    if errorlevel 1 goto linkend
    SET THEFILE=bibli.exe
    echo Linking %THEFILE%
    d:\lazarus0925\fpc\2.2.3\bin\i386-win32\ld.exe -b pe-i386 -m i386pe --gc-sections -s --dll --entry _DLLMainCRTStartup --base-file base.$$$ -o bibli.exe link.res
    if errorlevel 1 goto linkend
    d:\lazarus0925\fpc\2.2.3\bin\i386-win32\dlltool.exe -S d:\lazarus0925\fpc\2.2.3\bin\i386-win32\as.exe -D bibli.exe -e exp.$$$ --base-file base.$$$
    if errorlevel 1 goto linkend
    d:\lazarus0925\fpc\2.2.3\bin\i386-win32\ld.exe -b pe-i386 -m i386pe -s --dll --entry _DLLMainCRTStartup -o bibli.exe link.res exp.$$$
    if errorlevel 1 goto linkend
    d:\lazarus0925\fpc\2.2.3\bin\i386-win32\postw32.exe --subsystem console --input bibli.exe --stack 16777216
    if errorlevel 1 goto linkend
    goto end
    :asmend
    echo An error occured while assembling %THEFILE%
    goto end
    :linkend
    echo An error occured while linking %THEFILE%
    :end
    J'ai lu dans la liste des bugs qu'à un moment, cette section initialization n'était pas prise en compte sous linux
    http://bugs.freepascal.org/view.php?id=9089
    mais rien de particulier n'est signalé sous windows...

    Il y a-t-il une astuce qui m'échappe ?


    Lazarus 0.9.25 Win32.
    Dernière modification par Alcatîz ; 07/12/2008 à 20h23. Motif: balises code (bouton #)

  2. #2
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    Pour forcer le compilateur à créer une dll essaie :
    Menu Projet >> Options du projet >> Ficher de destination

    et là tu indiques en clair le nom de ton fichier à la sortie : bibli.dll

    Celà devrait r"soudre ton problème

  3. #3
    Invité
    Invité(e)
    Par défaut Partiellement résolu
    Bonjour,

    Merci pour votre solution qui en effet règle le problème du nom de fichier de sortie mais n'explique pas pourquoi l'insertion de la section Initialization dans le code de la librairie transforme à la construction une sortie ".dll" en une ".exe".

    Cordialement.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2010, 10h22
  2. Réponses: 3
    Dernier message: 22/04/2007, 00h45
  3. problème de socket dans une application win32
    Par deck_bsd dans le forum Windows
    Réponses: 5
    Dernier message: 20/01/2007, 18h32
  4. utilisation des panel dans une fenetre Win32
    Par ksoft dans le forum MFC
    Réponses: 1
    Dernier message: 02/05/2006, 21h45
  5. Réponses: 15
    Dernier message: 22/03/2005, 14h45

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