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

C++/CLI Discussion :

Charger une DLL dans un sous-répertoire


Sujet :

C++/CLI

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut Charger une DLL dans un sous-répertoire
    Bonjour,

    si je place ma DLL dans le répertoire de l'application elle est chargée, mais pas si elle se trouve dans un répertoire de l'application.
    comment demander à Windows de charger la DLL dans un répertoire de l'application ?

    merci

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 351
    Points : 42 822
    Points
    42 822
    Par défaut
    Soit il faut la charger manuellement depuis ton code, soit la dll doit être présente dans les chemins recherchés par Windows :
    https://docs.microsoft.com/fr-fr/win...p-applications
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut
    En utilisant LoadLibraryA() j'arrive à charger ma DLL, mais faut-il la décharger quand je n'en ai plus besoin, sachant que la DLL principale est elle-même déchargée ?

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 351
    Points : 42 822
    Points
    42 822
    Par défaut
    Je pense que c'est plus propre (à moins que ton appli est potentiellement ouverte/fermée à fréquence conséquente), sinon elle va rester en mémoire à dispo. Si Windows manque de mémoire, je pense qu'il décharge automatiquement les DLL plus utilisées
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Si une DLL a été chargée avec LoadLibrary(), Windows ne peut pas savoir qu'elle n'est plus utilisée juste parce que la DLL qui l'a chargée n'est plus là (parce que Windows ne sait pas quelle DLL l'a chargée).
    Si tu veux charger ta DLL "déclarativement" alors qu'elle est dans un sous-répertoire, tu peux la mettre en delay-load (chargement retardé) et utiliser AddDllDirectory() avec ton sous-répertoire avant le premier appel à la DLL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 415
    Points : 125
    Points
    125
    Par défaut
    ce code fonctionne égelement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
    AddDllDirectory(bstrDir);
    N. B. : LoadLibrary() nécessite également un delay-load (chargement retardé) pour fonctionner

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Pourquoi les solutions à base de manifeste d'application + COM ne permettraient pas de faire cela de manière plus "intégrée" ?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Une DLL COM peut être chargée via COM depuis n'importe où tant qu'elle est enregistrée, mais il faut également que ses dépendances soient accessibles.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Les les composants COM dépendent d'autres composant COM, c'est le travail de l'installeur de faire le nécessaire.
    Si c'est des dépendances à des Dll "classiques", le manifeste devrait permettre le déploiement "side by side" des Dll depuis des sous-répertoires de l'installation, non ?
    Pour le déchargement "automatique" de ces Dll "classique", un carrossage COM devrait être facile, non ?
    .NET intègre COM, mais je ne sais pas s'il y a plus "moderne" que COM pour le chargement/déchargement dynamique.

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

Discussions similaires

  1. Copie d'une dll dans Program Files sous Windows 7
    Par Jean-Marie64 dans le forum Installation, Déploiement et Sécurité
    Réponses: 1
    Dernier message: 12/05/2010, 16h14
  2. charger une dll C dans un code C++
    Par Nehmé dans le forum Visual C++
    Réponses: 6
    Dernier message: 04/09/2009, 18h28
  3. Charger une dll directement dans l'application
    Par cincap dans le forum Débuter
    Réponses: 3
    Dernier message: 06/06/2009, 15h32
  4. Réponses: 3
    Dernier message: 24/11/2006, 12h12
  5. Charger une DLL sous java
    Par mouzon dans le forum Général Java
    Réponses: 1
    Dernier message: 22/03/2006, 20h46

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