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

Windows Discussion :

Question sur DLL


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par défaut Question sur DLL
    Je me pose une question sur les DLL dans windows XP.

    J'ai tenté récement de recompiler une version maison de openAL. Initialement la librairie openAL se nomme : OpenAL32.dll. Ma version s'appelle MyOAL.dll.

    J'ai ensuite tenté de la tester avec un p'tit jeu qui utilise openAL pour son rendu sonore : Chromium BSU. Initialement la dll OpenAL32.dll se trouve au même niveau que l'exécutable du jeu.

    Si j'enlève la dll OpenAL32.dll et que je mets ma librairie. Le jeu utilise ma librairie. Curieux elles n'ont pas le même nom pourtant.

    Pire, le jeu utilise ma dll si celle-çi ainsi que OpenAL32.dll se trouve au même niveau que l'exécutable. Comment expliquer cela ?

    Windows scrute d'abord le repertoire courant tente de charger chaque dll (dans l'ordre alphabétique) et y cherche les ref aux fonctions utilisé par le prog ? A la première dll qui correspond il s'arrête ?

    Si un expert pouvait m'éclairer sur ce point.
    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Ce ne sont que des hypothèses, mais il se pourrait bien que :

    - l'application examine au démarrage tous les fichiers DLL du dossier courant (le sien, donc).
    - dans chacune des DLLs trouvées, recherche si les fonctions dont elle a besoin existent.
    - si toutes les fonction requises sont disponibles, alors la DLL est retenue.
    - et si plusieurs DLLs implémentent les fonctions requises, alors c'est la DLL la plus récente qui est sélectionnée.

    C'est un fonctionnement plausible, même si je pense personnellement que ce n'est pas génial en termes de conception, fiabilité et sécurité.

  3. #3
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Si j'enlève la dll OpenAL32.dll et que je mets ma librairie. Le jeu utilise ma librairie. Curieux elles n'ont pas le même nom pourtant.
    Me semble vraiment bizarre, comment tu es sur que c'est ta lib ?

    En principe (j'en suis quasi certain), Windows regarde la dll dans le répertoire courant !
    Si le nom de la dll ne s'y trouve pas, il va regarder dans les autres répertoires situé dans la variable d'environnement "path"

    En ligne de commande
    S’il ne trouve pas le nom la dll, il jète un message "…. xxx.dll est introuvable …"

    Donc je pense que tu as l'impression qu'il utilise ta dll, mais il doit sûrement en trouver une autre dans « Windows/system32/ » par exemple.

  4. #4
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour,

    Citation Envoyé par Ti-R
    Me semble vraiment bizarre, comment tu es sur que c'est ta lib ?

    En principe (j'en suis quasi certain), Windows regarde la dll dans le répertoire courant !
    Si le nom de la dll ne s'y trouve pas, il va regarder dans les autres répertoires situé dans la variable d'environnement "path"

    En ligne de commande
    S’il ne trouve pas le nom la dll, il jète un message "…. xxx.dll est introuvable …"

    Donc je pense que tu as l'impression qu'il utilise ta dll, mais il doit sûrement en trouver une autre dans « Windows/system32/ » par exemple.
    Je supose qu'il sait que c'est sa dll car le rendu doit être différent non? (sinon il n'aurait pas modifier la dll ...)

    Sinon, si ce qui est dit au dessus est vrai, ça fait peur en terme de sécurité

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par Ti-R
    En principe (j'en suis quasi certain), Windows regarde la dll dans le répertoire courant !
    Si le nom de la dll ne s'y trouve pas, il va regarder dans les autres répertoires situé dans la variable d'environnement "path"
    Ben non. Voir "Dynamic-Link Library Search Order" : là tu pourras être certain que le répertoire courant (à ne pas confondre avec le répertoire de l'application) n'est jamais le premier et que la recherche dans les répertoires dont le nom est présent dans la variable "PATH" s'effectue toujours en dernier.

    Citation Envoyé par sloshy
    Sinon, si ce qui est dit au dessus est vrai, ça fait peur en terme de sécurité
    Pas plus que pour n'importe quelle autre application avec n'importe quelle autre DLL (sauf quand des mesures ont spécifiquement été prises contre une utilisation de cet ordre de chargement à des fins malicieuses...ce qui est rare).

  6. #6
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    là tu pourras être certain que le répertoire courant (à ne pas confondre avec le répertoire de l'application)
    Abus de langage de ma part, je voulais bien dire le répertoire d'ou l'application est lancé, pas le répertoire sauvegardé comme courant dans Windows.... dsl

    la variable "PATH" s'effectue toujours en dernier.
    Mais c'est un résumé grossier de ce qui est fait dans la recherche

    The system directory
    sauf ->The 16-bit system directory
    The Windows directory

    sauf ->The current directory

    Car si on a pas modifié le path

    Les 2 premiers chemins sont -> =C:\WINDOWS\system32;C:\WINDOWS;
    J'ai toujours pas compris pourquoi ils gardent « C:\WINDOWS\system ».... mais bon il aime garder les reliques du passé

    Et la lib OpenAL
    A toute les chances de se trouver dans "C:\WINDOWS\system32"

Discussions similaires

  1. Question sur les usercontrols et la dll generee
    Par fripon dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/01/2007, 11h42
  2. plusieurs questions sur les Dll
    Par mnaulet dans le forum Windows
    Réponses: 4
    Dernier message: 07/08/2006, 08h39
  3. Question sur exports et les classes (pour une dll)
    Par DjPoke dans le forum Langage
    Réponses: 7
    Dernier message: 08/08/2005, 19h25
  4. Question sur les dll
    Par cjacquel dans le forum MFC
    Réponses: 2
    Dernier message: 29/04/2005, 17h36
  5. Question sur les DLL
    Par Hellmout dans le forum MFC
    Réponses: 7
    Dernier message: 22/10/2004, 02h51

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