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

Langage Delphi Discussion :

Embarquer une dll dans le .exe


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Software engineer
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 55
    Points
    55
    Par défaut Embarquer une dll dans le .exe
    Bonjour à tous,
    je débute avec Delphi et j'écris une petite application qui nécessite une dll; cependant je voudrais que ma dll soit embarquée à mon .exe . En outre je ne voudrais pas quelle soit extraite au lancement de l'application avant qu'on puisse utiliser ses méthodes ; j'ai vu des codes sur le site mais on opérait toujours l'extraction . Toute aide est la bienvenue car je me suis déjà et merci d'avance.

    Emmanuel !!!

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 671
    Points : 25 481
    Points
    25 481
    Par défaut

    Utiliser une fonction d'une DLL sans l'extraire
    lancer un exe depuis un TMemoryStream

    si tu ne veux pas faire une extraction fichier (même dans un répertoire temporaire), tu peux charger la ressource en mémoire et déclarer la zone mémoire comme exécutable (MadCodeHook doit savoir faire ça) avec tout le tralala VirtualProtect PAGE_EXECUTE_READWRITE, WriteProcessMemory ... on sera ravi de voir le code que tu produiras à ce sujet

    Comment insérer une ressource dans un exécutable ?
    Tu utilises le TResourceStream que tu utilises ensuite MemoryLoadLibrary et MemoryGetProcAddress proposé dans Loading a DLL from memory

    Faudrait savoir comment c'est gérer avec les BPL, ce sont des DLL sauce Borland

  3. #3
    Membre du Club
    Homme Profil pro
    Software engineer
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Ok ShaiLeTroll merci, je vais suivre la piste que tu me proposes et te tenir informé; et je n'oublirai pas de le marquer comme résolu !

  4. #4
    Membre du Club
    Homme Profil pro
    Software engineer
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Resalutation ShaiLeTroll, mon application marche comme je voulais à présent ; tes liens m'ont vraiment aidé, tu es vraiment un "Master" Sénior . Je vais essayer de le perfectionner un peu. Bonne soirée!

    Emmanuel.

  5. #5
    Membre du Club
    Homme Profil pro
    Software engineer
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 55
    Points
    55
    Par défaut
    Salut à tous,
    je tire un coup de chapeau particulier à ShaiLeTroll , dans la suite de mon programme je cherche à intergrer une dll ayant des dépendances avec d'autres. La difficulté que je rencontre est la détection de ses dépendances et l'utilisation de ma méthode dans la dll aproprié. J'utilise à cet éffet le fichier "BTMemoryModule.pas" que certainement vous avez déjà rencontrer; voici un aperçu de ce que j'écris pour mettre toute mes dll en mémoire afin de résoudre les dépendances et qui ne marche pas :

    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
     
        RS := TResourceStream.Create(hInstance, 'MifareSN', RT_RCDATA);
        RS1:= TResourceStream.Create(hInstance, 'borlndmm', RT_RCDATA);
        RS2:= TResourceStream.Create(hInstance, 'function', RT_RCDATA);
        RS3:= TResourceStream.Create(hInstance, 'USB', RT_RCDATA);
     
        MS := TMemoryStream.Create;
     
        Try
     
          MS.LoadFromStream(RS1);
          MS.LoadFromStream(RS2);
          MS.LoadFromStream(RS3);
     
          MS.LoadFromStream(RS);
     
          MS.Position := 0;
          //M_DllDataSize := MS.Size;
          M_DllDataSize    := RS.Size;
          MP_DllData := GetMemory(M_DllDataSize);
          MS.Read(MP_DllData^, M_DllDataSize);
     
        Finally
          MS.Free;
    Par la suite j'écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BtMM := BTMemoryLoadLibary(MP_DllData, M_DllDataSize);
      Try
        If BtMM = Nil Then Abort;
        @GetCardSN_func := BTMemoryGetProcAddress(btMM, 'GetCardSN');
        If @GetCardSN_func = Nil Then Abort;
        Self.Edit1.Text := GetCardSN_func;
      Except
    avec cette déclaration un peu plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type
      GetCardSN = function() : PAnsiChar; stdcall;
    var
      Form1: TForm1;
      GetCardSN_func  : GetCardSN;
    Merci d'avance pour toute aide qui serait la bienvenue
    Emmanuel

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

Discussions similaires

  1. Dialog MFC d'une dll dans un exe non MFC
    Par auwel dans le forum MFC
    Réponses: 3
    Dernier message: 06/03/2009, 20h23
  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