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

API, COM et SDKs Delphi Discussion :

Utiliser une fonction d'une DLL sans l'extraire


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut Utiliser une fonction d'une DLL sans l'extraire
    bonjour

    j'utilise une dll (dont je n'ai pas les sources biensur) dans mon application delphi et j'aimerais l'incorporer à mon exécutable (mise en ressource)

    je voudrais continuer à l'utiliser, mais sans avoir à l'extraire sur le disque dur

    pas facile à trouver sur le net, j'aimerais savoir si c'est faisable ?

    je vous remercie d'avance

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Possible de l'intégrer comme ressource à ton application.
    Impossible à utiliser sans l'avoir extrait et enregistré sur un disque...

    Tu aurais un code Objet de cette bibliothèque, tu pourrais sous certaine condition l'intégrer et l'appeler directement depuis ton application (comme le fait ZLib par exemple).
    --
    Philippe.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Tu aurais un code Objet de cette bibliothèque, tu pourrais sous certaine condition l'intégrer et l'appeler directement depuis ton application (comme le fait ZLib par exemple).
    --
    Philippe.
    je n'ai pas compris ce passage

    pour l'utilisation de la dll, j'ai entendu parlé d'exécuter en mémoire; es tu certains que c'est impossible sans extraire ?

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    DllMemoryLoader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     DLL Loader by Aphex
      http://www.iamaphex.cjb.net
      unremote@knology.net
     
      Based on code from gmm@ufacom.ru
     
      function xLoadLibrary(Src: Pointer; Imports: array of TImportItem): TLibInfo;
      procedure xFreeLibrary(hModule: TLibInfo);
    je ne me rappelle plus si je l'ai testé, ou juste gardé en attendant le besoin !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par Coussati Voir le message
    je n'ai pas compris ce passage
    La bibliothèque zlib développée par Jean-loup Gailly et Mark Adler, est écrite en C (C++). Le code a été compilé par Borland C++ qui a généré des fichiers *.obj que l'on peut intégrer directement dans le code delphi après avoir déclaré les fonctions en question.
    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
     // Extrait du code source pour Delphi
    {$L deflate.obj}
    {$L inflate.obj}
    {$L inftrees.obj}
    {$L trees.obj}
    {$L adler32.obj}
    {$L infblock.obj}
    {$L infcodes.obj}
    {$L infutil.obj}
    {$L inffast.obj}
     
    procedure _tr_init; external;
    procedure _tr_tally; external;
    procedure _tr_flush_block; external;
    procedure _tr_align; external;
    procedure _tr_stored_block; external;
    procedure adler32; external;
    procedure inflate_blocks_new; external;
    procedure inflate_blocks; external;
    procedure inflate_blocks_reset; external;
    procedure inflate_blocks_free; external;
    procedure inflate_set_dictionary; external;
    procedure inflate_trees_bits; external;
    procedure inflate_trees_dynamic; external;
    procedure inflate_trees_fixed; external;
    procedure inflate_trees_free; external;
    procedure inflate_codes_new; external;
    procedure inflate_codes; external;
    procedure inflate_codes_free; external;
    procedure _inflate_mask; external;
    procedure inflate_flush; external;
    procedure inflate_fast; external;
    Citation Envoyé par Coussati Voir le message
    pour l'utilisation de la dll, j'ai entendu parlé d'exécuter en mémoire; es tu certains que c'est impossible sans extraire ?
    En fait, j'en étais persuadé mais j'ai trouvé cet article qui montre que j'avais tort et propose une méthode : delphi-load-resource-dll-into-memory
    C'est en anglais, mais très compréhensible...
    --
    Philippe.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut
    merci tourlourou mais il y a peu d'explication et le site d'aphex ne fonctionne pas

    Ph. B. je cherche à faire ça depuis assez longtemps (j'avais laissé tombé) et j'étais déjà tombé sur ce site, mais je ne sais plus pourquoi je n'avais pas réussi à faire fonctionner ... peut être parce que je souhaite utiliser une fonctionne de la dll et non une procédure ? je ne sais pas ...

    vu comme ça sur le site ça l'air faisable ...

    une fois sur mon pc delphi, je vais essayer à nouveau et te tiendras informé

    merci à toi

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    http://www.hackchina.com/en/cont/190870 fournit un exemple d'utilisation de DllMemoryLoader sur une dll en ressource

    une modification rapide du code doit permettre de transformer le tableau de TImportItem en TStringList avec l'adresse des fonctions en Objects => affectation facile des pointeurs de fonctions grâce à IndexOf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @DllFunc:=Pointer(slDLLFuncs.Objects[slDLLFuncs.IndexOf('Nom fonction désirée')]);
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Comment utiliser une fonction dans une fonction
    Par hatenaku dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2008, 20h00
  3. comment utiliser un programme comme une fonction dans une macro exel
    Par ERICKO dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/10/2007, 23h39
  4. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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