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

Visual C++ Discussion :

[Dll]Forcer le chargement d'une msvcrt.dll située dans le repertoire d'execution


Sujet :

Visual C++

  1. #1
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Points : 1 270
    Points
    1 270
    Par défaut [Dll]Forcer le chargement d'une msvcrt.dll située dans le repertoire d'execution
    Bonjour,
    Désolé pour le titre a rallonge mais la au moins on sais à quoi s'attendre !
    Mon problème vien du fait que mon executable est linker avec une dll qui elle utilise msvcrt.dll. Le probleme c'est que je voudrai distribuer cette dll avec mon exe (et donc je la place ds le mm rep que l'executable) mais ma fameuse dll qui utilise msvcrt ne va pas chercher celle du rep d'execution mais celui de sys32...

    Je cherche un moyen de la forcer a utiliser celle que je fourni (pour des raisons de compatibilité évidente !)

    En cherchant j'ai appris l'existance d'une clé dans la base de registre (SafeDllSearchMode) qui est sensée forcer le chargement des dll des rep courants avant celle de sys32.
    Cependant ça n'a pas l'air si efficace.

    Sinon je me disais que si je rajoute une dependance vers msvcrt à mon executable en passant par les manifest. Cette derniere serait donc chargée a l'execution de mon programme et ma dll n'aurai pas besoin de la recharger (encore faut-il que j'arrive a preciser a mon exe de chargée la msvcrt courante...). De plus en créant une dépendance à msvcrt, la dll necessaire ne'est pas msvcrt mais msvcr80.dll (ou autre selon version de vc).

    Désolé de vous avoir fait lire tant, mais je pense que c'est à peu près clair maintenant.

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    Ta dll doit être placée dans le répertoire ou est situé ton exécutable.

  3. #3
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Points : 1 270
    Points
    1 270
    Par défaut
    Merci Farscape,
    mais je n'ai pas du être assez clair, car c'est la première chose que j'ai essaiyée. Mais c'était trop facile !!

    En fait j'ai trouver la solution. J'ai du recréer mon appli sous vs6. La quand je créer une dependance vers msvcrt.lib il charge bien msvcrt.dll et non les msvcr80.dll et autre dans les dernieres version de vs.

    Mais il a fallu rajouter un fichier leNomDeMonExe.exe.local dans le repertoire de mon exe. Ce fichier totalement vide, force le chargement des dll au niveau local.

    Mais j'aurais bien aimer savoir comment lier mon appli à msvcrt.dll sous visual 2005 mais ça a l'air vraiment pas évidement.
    (voir http://kobyk.wordpress.com/2007/07/2...visual-c-2005/

    Voila donc c'est Résolu.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    le répertoire d'exécution et l'emplacement du fichier exécutable sont deux choses différentes.
    en cas de recherche de dll, l'emplacement de l'exécutable est prioritaire vient ensuite le chemin de recherche.
    dans le cas d'un exécutable sous VC2005 ce processus n'est pas valide il est lié au manifest intégré à l'application.
    Enfin non tu ne peux pas utiliser explicitement msvcrt.dll à la place de la version VC2005.

  5. #5
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Points : 1 270
    Points
    1 270
    Par défaut
    Le repertoire d'execution et l'emplacement de l'executable ne revient pas au meme ? Quelle est la diference alors s-il te plait ?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par Anikinisan Voir le message
    Le repertoire d'execution et l'emplacement de l'executable ne revient pas au meme ? Quelle est la diference alors s-il te plait ?
    non ,tu peux très mettre ton exécutable sous c:\windows (par exemple)
    et l'exécuter dans le répertoire c:\program files\monexe\data.
    ce paramétrage correspond à ce que tu trouves sur les propriétés de l'icône du programme avec la zone "démarrer dans".
    ou encore dans le debugger de visual avec la zone "répertoire de travail"...

  7. #7
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Points : 1 270
    Points
    1 270
    Par défaut
    A ok. Oui bien sûr on peut executer son appli depuis un autre repertoire. Je ne pensais pas à ça... Mais par contre je n'avais jamais remarqué cette option de vs pour le working directory. Ca peut toujours être utile un jour !
    Merci encore Farscape !

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

Discussions similaires

  1. dll dans meme repertoire que executable
    Par kazuzu dans le forum C#
    Réponses: 4
    Dernier message: 22/10/2013, 12h02
  2. [Débutant] chargement d'une image SimpleButtonExport.Image dans resource
    Par denisdg dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/10/2012, 02h19
  3. cc3260.dll introuvable au chargement d'une .dll
    Par shadma dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/09/2008, 10h15
  4. Réponses: 2
    Dernier message: 06/02/2006, 09h12
  5. Chargement d'une lib partagée C++ dans un programme C
    Par Zero dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/09/2003, 16h40

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