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 :

Création "d'exécutable portable" en VC++ et chargement de DLL


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Création "d'exécutable portable" en VC++ et chargement de DLL
    Bonjour tous je souhaite créer un programme exécutable (.exe) de type (portable exécutable format https://en.wikipedia.org/wiki/Portable_Executable ) en VC++,
    ce programme doit utiliser des dll Windows et autres(pour les autres je connais les headers mais la dll est différente selon la machine ce qui m’empêche de l’inclure dans le exe de plus l’exécutable ne serait plus portable/indépendant ), je ne peut pas non plus utiliser le linker de visual studio car l’exécutable créer deviendrai dépendant des chemins vers les dll paramétré dans visual studio.
    Après des recherches sur internet de multiples problème se sont posés :

    Comment «linker» les dll (windows et autres) de manière explicite afin que l’exécutable soit réellement portable (indépendant de la dll) ?
    Une des piste est le linkage explicite via loadlibrary et getprocaddress mais si j’ai bien compris j’aurai besoin de kernell32.dll donc il faut d’abord que je charge cette dll (comment le faire de manière explicite si je n’ai pas la fonction loadlibrary) et de plus il faut définir des foncteurs sur chacune des fonction (prototype) de la dll utilisé ce qui me paraît un peu fastidieux mais clairement faisable.

    Comment trouver le chemin des dll (variable d’environnement, fonction windows qui le permet, créer un fonction de recherche qui tente de charger ces dll à différent chemin probable ) ?

    Quel sont les options/paramètres de compilation afin de créer un tel exécutable sous visual studio (PE)?


    Merci d’avance pour vos réponse et bonne journée/soirée.


    Ps:j’ai des base moyenne de programmation en c++, mais mes connaissance du fonctionnement de Windows, de ces librairies ce résume au néant.

    Ps’:Je suis ouvert a toute réponse si vous avez des lien vers de la documentation ou des tutoriel se rapprochant de mon problème je serait déjà très content.

  2. #2
    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 519
    Points
    41 519
    Par défaut
    Tous les exécutables Win32 sont au format PE, pas besoin de le mentionner.

    Je ne crois pas que les tables d'import de DLLs contiennent des chemins absolus: À ma connaissance, elles contiennent seulement les noms des DLLs, ensuite Windows suit le Dynamic-Link Library Search Order pour les trouver (soit dans le même répertoire que l'exécutable, des répertoires standards, ou un répertoire spécifié par SetDllDirectory()).

    Kernel32.dll étant une DLL Windows (protégée de surcroit), elle sera trouvée parmi les DLLs standard.


    Si tu dois charger des DLLs différentes selon la machine, tu devras en effet passer par LoadLibrary() ou LoadLibraryEx(). De plus, GetModuleFileName(NULL, buffer, taille) te donnera le chemin complet de ton exécutable, y compris donc le répertoire où il se trouve.
    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.

Discussions similaires

  1. PL-SQL : Création et Exécution Procédure
    Par Mimile28 dans le forum SQL
    Réponses: 10
    Dernier message: 16/01/2008, 16h26
  2. Création d'exécutable avec g77
    Par Agathe dans le forum Fortran
    Réponses: 4
    Dernier message: 20/07/2007, 09h17
  3. création d'exécutable pour programme java
    Par RIMhoussem dans le forum JBuilder
    Réponses: 5
    Dernier message: 18/02/2007, 19h25
  4. Réponses: 1
    Dernier message: 09/02/2006, 10h11
  5. Problemes de création en exécution
    Par popeyes dans le forum Composants VCL
    Réponses: 6
    Dernier message: 29/06/2004, 19h02

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