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

Delphi Discussion :

Comment indiquer l'emplacement de la DLL


Sujet :

Delphi

  1. #1
    Membre actif Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Points : 264
    Points
    264
    Par défaut Comment indiquer l'emplacement de la DLL
    Bonjour!
    SVP j'ai créer une DLL avec Delphi que j'ai mis dans le répertoire System32 du Windows.
    et je doit appeler une fonction contenue dans cette dll .
    Comment faire pour indiquer l'emplacement de la DLL

    Merci.

  2. #2
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Points : 157
    Points
    157
    Par défaut
    Salut,
    Si je ne me trompe pas, tu n'a rien a faire justement, car system32 fait partie de la liste des "paths" systême de windows... Il n'y a que la procedure loadlibrary('le nom de ta dll') à coder dans ton programme appelant...

  3. #3
    Membre actif Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Points : 264
    Points
    264
    Par défaut
    Bonjour ,
    peut etre je dois donné plus d'explication

    si ma DLL se trouve dans le meme reprtoire de mon application pas de probleme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     procedure MaFonction; external MADLL.dll
    mais je veux connaitre si cette DLL se trouve dans autre emplecement (exemple System32 (repertoire du Windows))
    ma question et comment indiquer l'emplacement de ma DLL.
    bon developpment a tous.

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par MedGIR
    Salut,
    Si je ne me trompe pas, tu n'a rien a faire justement, car system32 fait partie de la liste des "paths" systême de windows... Il n'y a que la procedure loadlibrary('le nom de ta dll') à coder dans ton programme appelant...
    +1, je confirme, tu ne te trompes pas

  5. #5
    Membre actif Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Points : 264
    Points
    264
    Par défaut
    Merci a vous 2.
    je vais testé immédiatement.
    cordialement.

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Voilà, quand un programme à besoin d'une DLL, il ne connait QUE son nom, il n'a besoin de rien d'autre pour l'utiliser.

    C'est Windows qui se charge de lui trouver, et voici comment il s'y prend :

    Il recherche la dll dans cet ordre d'emplacements possible
    1. Le répertoire de l'application qui appelle la dll (ou le répertoire de la Dll qui elle même cherche cette dll )
    2. Le répertoir courant de Windows (obtenu avec GetCurrentDir en Delphi ou Pascal et changé avec SetCurrenDir) (c'est la même chose que le chemin du prompt MS-Dos)
    3. Le répertoire système de Windows. La fonction API windows GetSystemDirectory permet d'obttenir ce chemin. (En général c'est c:\windows\system ou c:\windows\system32 )
    4. Le répertoire Windows. Qui peut être otenu avec GetWindowsDirectory (en général c:\Windows)
    5. Les répertoires listés dans la variable d'environnement PATH, pris dans l'ordre.


    Il se peut donc que tu aies par exemple, ta dll dans le répertoire de ton application, et la même dans le répertoire Windows.
    Ce sera celle située dans le répertoire de ton application qui sera donc prioritaire

    Ce que j'ai déjà vu, c'est quelqu'un enlever la dll se trouvant dans le répertoire d'une application en disant "tu vois, ça marche, il n'a pas besoin de cette dll", mais en fait, c'est parce que la même dll était dans le répertoire système

    Ne te mélange donc pas les pinceaux

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par waskol
    Voilà, quand un programme à besoin d'une DLL, il ne connait QUE son nom, il n'a besoin de rien d'autre pour l'utiliser.

    C'est Windows qui se charge de lui trouver, et voici comment il s'y prend :

    Il recherche la dll dans cet ordre d'emplacements possible
    1. Le répertoire de l'application qui appelle la dll (ou le répertoire de la Dll qui elle même cherche cette dll )
    2. Le répertoir courant de Windows (obtenu avec GetCurrentDir en Delphi ou Pascal et changé avec SetCurrenDir) (c'est la même chose que le chemin du prompt MS-Dos)
    3. Le répertoire système de Windows. La fonction API windows GetSystemDirectory permet d'obttenir ce chemin. (En général c'est c:\windows\system ou c:\windows\system32 )
    4. Le répertoire Windows. Qui peut être otenu avec GetWindowsDirectory (en général c:\Windows)
    5. Les répertoires listés dans la variable d'environnement PATH, pris dans l'ordre.


    Il se peut donc que tu aies par exemple, ta dll dans le répertoire de ton application, et la même dans le répertoire Windows.
    Ce sera celle située dans le répertoire de ton application qui sera donc prioritaire

    Ce que j'ai déjà vu, c'est quelqu'un enlever la dll se trouvant dans le répertoire d'une application en disant "tu vois, ça marche, il n'a pas besoin de cette dll", mais en fait, c'est parce que la même dll était dans le répertoire système

    Ne te mélange donc pas les pinceaux

    Il n'y a pas aussi les dll enregistrées dans la base de registre avec regsvr32 qui permet de les mettre où l'on veut ?

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Malatar
    Il n'y a pas aussi les dll enregistrées dans la base de registre avec regsvr32 qui permet de les mettre où l'on veut ?
    ça, ce sont des services, pas des bibliothèques, le mécanisme d'accès est différent d'une dll classique, donc si je n'en ai pas parlé, c'est normal.
    Elles n'ont pas besoin d'être appelés pour bosser toutes seules (c'est windows, en fait le client de ces dll)

    Je dirais,qu'à la rigueur, celà rejoint le cas des dll dont le chemin est indiqué par la variable d'environnement path. effectivement, on peu dire qu'il y a une similarité, c'est assez similaire : la dll est à un emplacement particulier du disque dur, et le chemin est enregistré et connu par Windows

  9. #9
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par waskol
    donc si je n'en ai pas parlé, c'est normal.
    Non, ce n'est pas normal, c'est une erreur.
    Car même si Regsvr32 est fait pour registrer un service il permet de registrer des Dll et donc de passer par dessus la chaîne de gestion des priorités de windows.

    Or si vous faîtes le test avec Midas.dll, vous comprendrez combien c'est important.
    Car en fonction de la version de midas.dll utiliser un insertr dans un clientdataset fait un insert ou un append.

    Or l'installation de Delphi 2005 par exemple registre son propre midas.
    Donc si vous installer le dit produit sur un serveur qui possède plusieurs environnement de test avec différentes versions de Midas, vous "flinguez" toutes vos configs d'un coup.

    a+

  10. #10
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Yurck
    Non, ce n'est pas normal, c'est une erreur.
    Car même si Regsvr32 est fait pour registrer un service il permet de registrer des Dll et donc de passer par dessus la chaîne de gestion des priorités de windows.

    Or si vous faîtes le test avec Midas.dll, vous comprendrez combien c'est important.
    Car en fonction de la version de midas.dll utiliser un insertr dans un clientdataset fait un insert ou un append.

    Or l'installation de Delphi 2005 par exemple registre son propre midas.
    Donc si vous installer le dit produit sur un serveur qui possède plusieurs environnement de test avec différentes versions de Midas, vous "flinguez" toutes vos configs d'un coup.

    a+
    A bah vu sous cet angle alors....

    Non, sans rire, un service EST une application à part entière, et c'est là ou je fais la différence avec la simple DLL. Comme on ne peut pas dopuble cliquer dessus pour démarrer l'application, on utilise regsrv32.

    Donc ce dont tu me parles avec Midas c'est bien, mais quand bien même que tu n'as qu'une seule Midas.dll sur ton PC, je te défi de faire fonctionner correctement quoique ce soit ayant besoin d'elle sans l'avoir "démarré" avec RegSrv32

    Une Dll "de base" (pas une ActiveX ou un objet COM, COM+), ça m'étonnerais que ça puisse passer avec regsrv32.

    m'enfin bon, je me trompe peut-être, personne n'est infaillible

  11. #11
    Membre actif Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Points : 264
    Points
    264
    Par défaut
    Merci a vous tous.
    c'est la premiere fois que j'utilise les DLL , et c'est pour ca que j'ai posé cette question.
    dailleur c'est grace a vous qu'on progresse.
    bon developpement.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/07/2006, 16h18
  2. Réponses: 13
    Dernier message: 16/03/2005, 11h29
  3. Comment charger un TFrame depuis une dll ?
    Par Millenod dans le forum Langage
    Réponses: 29
    Dernier message: 22/12/2004, 14h48
  4. Réponses: 9
    Dernier message: 03/12/2004, 11h35
  5. automation excel : comment indiquer la feuille de travail ?
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 15h14

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