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

Delphi Discussion :

d'un exe à une DLL


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut d'un exe à une DLL
    Bonjour j'ai un exe que je veux le rendre en une dll, mais j'ai un problème car je ne sais comment me debarasser des objet Application dans mon .dpr. Voici mon code de mon dpr:

    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
     
    program exportdeals;
     
    uses
      ShareMem,
      Forms,
      Windows,
      FM_Main in 'FM_Main.pas' {F_Main};
     
    var
      Mutex : THandle;
    {$R *.res}
     
    begin
     
      ExportDealRestoreMsg := Windows.RegisterWindowMessage('Export des Deals');
      Mutex := CreateMutex(nil, True, 'Export des Deals');
      if (Mutex <> 0) and (GetLastError = 0) then
      begin
        try
          Application.Initialize;
      Application.CreateForm(TF_Main, F_Main); // createform est une fonction implémentée dans la form TF_Main
      Application.Run;
        finally
          if Mutex <> 0 then
            CloseHandle(Mutex);
        end;
      end
      else
        SendMessage(HWND_BROADCAST, ExportDealRestoreMsg, 0, 0); 
     
    end.
    Si je met Createform sans l'instancier de l'objet application le compilateur ne l'accepte pas!!!
    Merci d'avance pour votre aide.

    Edit: Quand je change program en library afin d eme generer une dll, j'ai une erreur lors de la compilation du type: Access violation at adress ... in module 'coreide60.bpl'. Read of address ...
    Merci

  2. #2
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par bouzaidi
    Edit: Quand je change program en library afin d eme generer une dll, j'ai une erreur lors de la compilation du type: Access violation at adress ... in module 'coreide60.bpl'. Read of address ...
    Ca ne m'étonne pas vraiment... Tu dois plutôt créer un nouveau projet, en choisissant DLL comme type de projet, puis replacer dans la DLL les unités utilisées dans le DPR.

    Puis il faut encore marquer les clauses exports et ce genre de choses, qui font d'une DLL ce qu'elle est.
    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
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Simplement en supprimant toutes les instances de Application et en ajoutant une fonction de creation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Procedure CreateMainForm; stdcall;
    Begin
    F_Main := TF_Main.Create(nil);
    F_Main.Show;
    End;
     
    Exports
      CreateMainForm name 'CreateMainForm';
    apres tu peux te passer de cette fonction en declarant le code de creation dans le begin/end mais cela veux dire que ta form sera cree des le chargement de la dll.

    Apres tu peux implemnter une interface pour faciliter la gestion de ta form (parametrage) ou simplement cree une "api" (ie une fonction exportee pour chaques actions a effectuer sur la form depuis l'exe)

    Pour la destruction, soit une fonction exportee, soit redefinir la methode exitproc de la dll :

    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
     
    Var OldExit : Pointer;
     
    Procedure MonExit;
    Begin
    F_Main.release;
    ExitProc := @OldExit;
    End;
     
    Begin
    OldExit := @ExitProc;
    ExitProc := @MonExit;
    F_Main := TF_Main.Create(nil);
    F_Main.show;
    End;

  4. #4
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    bouzaidi, tu aurais donc changé de méthode, finalement, et suivi les premiers conseils qui t'avaient été donnés ? Il y a une raison précise ?

    Sinon, je plussoie : il faut créer un nouveau projet. Normalement les unités-fiches passent sans adaptation dans un projet dll.

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    la creation d'un nouveau projet me semble pas necessaire.
    Par contre, la suppression de tous les fichiers autre que le dpr du source du projet me semble peut etre une chose a faire.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut
    Citation Envoyé par Clorish
    la creation d'un nouveau projet me semble pas necessaire.
    Par contre, la suppression de tous les fichiers autre que le dpr du source du projet me semble peut etre une chose a faire.
    Pourquoi les supprimer alors que j'en ai besoin?? est ce que tu veux dire les mettre directement dans le dpr? Si oui comment ce faire alors que j'ai des form et des unit dans mon projet???

Discussions similaires

  1. Lancer une dll à partir d'un exe
    Par jean.cdc dans le forum C
    Réponses: 17
    Dernier message: 25/07/2006, 17h44
  2. [VB] COmment compiler une dll dans un exe (zlib.dll)
    Par Khrysby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2005, 12h10
  3. Intégrer une dll dans un EXE
    Par Akim13 dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 02h11
  4. Inclusion d'une DLL dans un exe?
    Par luareon22 dans le forum MFC
    Réponses: 10
    Dernier message: 29/08/2005, 12h08
  5. Inclure une DLL dans le .exe final?? possible?
    Par xavmax dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2005, 17h00

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