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 :

[DLL] Liaison statique: quelle DLL est utilisée si présente à plusieurs endroits ?


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 12
    Points
    12
    Par défaut [DLL] Liaison statique: quelle DLL est utilisée si présente à plusieurs endroits ?
    Bonjour,

    dans la série des questions bêtes voici la dernière que je me pose : j'ai une application qui utilise une DLL toto.dll. J'ai déclaré toutes les fonctions de celle-ci de manière statique du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ma_fonction(mon_param: String): Boolean; stdcall; external 'toto.dll' name 'nom_fonction';
    Maintenant imaginons que mon toto.dll est copié à plusieurs endroits :
    • dans le même répertoire que l'application
    • dans windows\system32
    • dans un répertoire inclut dans le "path"

    Il me semble que l'application d'elle même va chercher la DLL dans cet ordre (ou après). Par contre, moi, au sein de l'application comment savoir quelle DLL est utilisée ? Je pose la question car il peut exister plusieurs version de la DLL est j'aimerai afficher un message d'avertissement dans le cas où la version est antérieure à une certaine valeur.
    Donc est-ce faisable en tant que tel (i.e. liaison statique) ou bien dois-je obligatoirement pour faire cela passer des liaisons dynamiques ?
    Merci d'avance pour vos réponses

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    le plus simple me semble d'ajouter une fonction dans ta DLL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function GetVersion:integer; stdcall;

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Lorsque tu utilises une liaison statique, c'est Windows qui "trouve" la DLL qui va bien en utilisant l'algorithme décrit ici :
    http://msdn.microsoft.com/en-us/library/ms682586.aspx

    • The directory from which the application loaded.
    • The system directory. Use the GetSystemDirectory function to get the path of this directory.
    • The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched.
    • The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
    • The current directory.
    • The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the App Paths registry key. The App Paths key is not used when computing the DLL search path.
    Pour détecter la version "facilement", ajouter la fonction de Paul me semble raisonnable

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    eheh oui j'aimerai bien... le problème c'est que je n'ai pas les sources de la DLL, je l'ai tel quel

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    C'est pour cela que normalement une application doit déployer ses DLLs dans son dossier et pas dans le répertoire système. Sinon, c'est ce que MS appelle "the DLL hell". Dans ton cas, si tu te bornes à ca, où est le problème ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Reisubar Voir le message
    C'est pour cela que normalement une application doit déployer ses DLLs dans son dossier et pas dans le répertoire système. Sinon, c'est ce que MS appelle "the DLL hell". Dans ton cas, si tu te bornes à ca, où est le problème ?
    Non mais tu as raison, le plus simple est peut être que j'inclus moi même la DLL avec le soft et que les deux soient au même endroit. Allez zou c'est parti
    Et encore merci pour votre aide

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

Discussions similaires

  1. Ping : comment savoir quelle carte est utilisée ?
    Par origan dans le forum Administration
    Réponses: 2
    Dernier message: 31/05/2012, 10h04
  2. [AC-2003] Savoir quelle imprimante est utilisée SANS ouvrir le rapport ?
    Par marot_r dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/08/2010, 02h02
  3. Réponses: 1
    Dernier message: 09/01/2007, 20h41
  4. Réponses: 1
    Dernier message: 16/11/2006, 14h01
  5. [XP] comment savoir quel prog utilise quelle dll?!
    Par noone1 dans le forum Windows XP
    Réponses: 17
    Dernier message: 13/11/2006, 12h03

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