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 :

Récupérer le nom "réel" d'une DLL


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut Récupérer le nom "réel" d'une DLL
    Bonjour,

    Je suis à la recherche de la fonction Delphi (ou API Windows) qui permet de récupérer
    le nom réel d'un module chargé.

    Le contexte est le suivant :

    J'ai une DLL "c:\temp\MaDLL.dll" obtenue par compilation du projet delphi "MaDLL.dpr"

    Je renomme ce fichier en "c:\temp\DLL_V150.dll" .


    Je charge cette DLL depuis mon programme principal et j'essaie de récupérer son nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	procedure getNomLib(var nom:string);
      	var hd:THandle; nom:string;
    	begin
      		hd:=loadLibrary('c:\temp\DLL_V150.dll');
      		nom:=getModuleName(hd);
    	end;
    Au retour de l'appel à "getNomLib" la variable "nom" vaut : 'c:\temp\DLL_V150.dll'

    Dans l'IDE Delphi on peut voir la liste des modules : "Fenêtre de débogage>>Modules"

    Cette liste se présente sous forme d'une table. Pour ce qui est de ma librairie je vois les
    informations suivantes :


    |NOM | CHEMIN |
    |MaDLL.dll | c:\temp\DLL_V150.dll |

    Et donc, je pense qu'il est possible de récupérer le nom réel de ma dll "MaDLL.dll" depuis mon programme principal, qu'en pensez-vous ?

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    n'as-tu pas ces infos dans les informations de version ?

    un clic droit|propriétés sur la DLL pour voir si c'est ça
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut Récupérer le nom "réel" d'une DLL (suite)
    Non, cette information n'est pas visible dans les propriétés de la DLL.

    L'IDE Delphi doit utiliser une API Windows qui lui permet de connaitre
    le "nom caché" de la DLL puisqu'il sait l'afficher dans la fenêtre de
    deboggage "Modules".

    J'ai l'impression que lorsque l'on charge la DLL "xxx.dll" renomée en
    "yyy.dll" le processus la connait toujours comme "xxx.dll".

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    on nous cache des choses ?

    bon je viens d'ouvrir une de mes DLL Delphi sous NotePad, son nom apparait en effet dans la table d'export...il ne te reste donc plus qu'à retrouver cette information

    je ne sais pas s'il existe une fonction dans l'API Windows pour lire cela, sinon il faut taper dans la structure des fichiers PE pour localiser la table d'exportation
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut
    J'ai testé "GetModuleFilename" et ça retourne la même chose que
    "GetModuleName".

    Il est possible de lister tous les modules chargés dans le process actif
    en utilisant une énumération sur la librairie "psapi.dll" mais on ne récupère
    que les noms de fichiers et pas le nom réel de la DLL qui est bien
    contenu quelque part dans le fichier (on peut effectivement le voir
    en chargeant la DLL sous NotePad).

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

Discussions similaires

  1. Récupérer le nom de la feuille d'une cellule appelante
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2006, 20h12
  2. [VBA-E]récupérer le nom des lignes sélectionnées d'une listbox
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/06/2006, 11h28

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