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 :

utiliser une dll en C++


Sujet :

Visual C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut utiliser une dll en C++
    Bonjour

    J'amerai savoir comment inclut-on les dll dans un projet en C++.
    L'idée serait d'utiliser aussi des dll en plus-in donc inclure aussi des dll si seulement elles existent. Comment doit-on le spécifier dans le code.

    J'aurait la même question aussi mais dans un projet C++/CLR .

    raphchar

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Un chargement dynamique de DLL se fait par LoadLibrary/GetProcAdress.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Bonjour,
    Un chargement dynamique de DLL se fait par LoadLibrary/GetProcAdress.
    Sans oublier le FreeLibrary() quand on n'a plus besoin de la DLL

  4. #4
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    En utilisant les heritages, les variables statiques et le load dynamic, on peut se passer des getProcAdress.

    si la DLL implémente une classe qui herite d'une classe déclarée dans un core, et que :
    * dans la dll il y a un membre static
    * dans le core il y a la déclaration du membre static avec dans le constructeur une mise en mémoire (pushbask dans une liste ou similaire) de l'element qui vient d'etre construit ...

    alors au chargmeent de la DLL, automatiquement ta variable static sera implémentée, le constructeur appellé dans le core, et donc dans le core tu aura ton instance de classe de ta DLL.

    Testé et approuvé.
    Necessite par contre quelques aménagements : heritage, méthodes virtuelles, code dans la DLL et dans le core, DLL qui dépend donc du core pour compiler et enfin, dans le cs d'un singleton qui est un registre pour gerer les dll dynamiques, il faut que le core soit aussi une lib....

    Mais dans certains cas (dans le mien) c'est tres pratique.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Ange_blond Voir le message
    En utilisant les heritages, les variables statiques et le load dynamic, on peut se passer des getProcAdress.

    si la DLL implémente une classe qui herite d'une classe déclarée dans un core, et que :
    * dans la dll il y a un membre static
    * dans le core il y a la déclaration du membre static avec dans le constructeur une mise en mémoire (pushbask dans une liste ou similaire) de l'element qui vient d'etre construit ...

    alors au chargmeent de la DLL, automatiquement ta variable static sera implémentée, le constructeur appellé dans le core, et donc dans le core tu aura ton instance de classe de ta DLL.

    Testé et approuvé.
    Necessite par contre quelques aménagements : heritage, méthodes virtuelles, code dans la DLL et dans le core, DLL qui dépend donc du core pour compiler et enfin, dans le cs d'un singleton qui est un registre pour gerer les dll dynamiques, il faut que le core soit aussi une lib....

    Mais dans certains cas (dans le mien) c'est tres pratique.
    Modulo un bon plat de spaghetti

  6. #6
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Oui mais on gagne en utilisation :

    les getProdAdress premettent la communication uniquement avec des types du C ... (double déclaration de classe dans le cas où on veut balader une instance, pas de std::string, ...)
    là on communique direct avec l'instance sans autre restriction.

    Chacun choisis le plus adapté à ses bseoins, dans mon cas c'est tout vu

  7. #7
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    Quelqu'nu n'aurait-il pas des exemples exiplicites? ou un tutoriel plus précis que sur la msdn? parce malgrès vos réponses (merci) je ne suis pas très avancé.

    raphchar

  8. #8
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    http://www.codeproject.com/KB/DLL/plug-in.aspx

    http://www.codeguru.com/cpp/w-p/dll/....php/c123#more

    http://msdn.microsoft.com/en-us/libr...59(VS.60).aspx

    ( http://msdn.microsoft.com/en-us/libr...13(VS.60).aspx )

    Rien de compliqué, suffit de déclarer les trucs dans la dll comme dllexport et ensuite, un loadlibrary("mydll.dll") et des getProcAdress(...) pour chaque fonction.
    Tu récupere ainsi des pointeurs sur fonction, que tu peux donc utiliser ensuite à ta guise.

  9. #9
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    merci

    je crois que le deuxième lien est le mieux.

    raphchar

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

Discussions similaires

  1. [JNI] Difficultés pour utiliser une DLL
    Par etiennegaloup dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 15/08/2005, 21h29
  2. [Windows]utiliser une dll c# en java
    Par dude666 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 01/07/2005, 02h19
  3. Réponses: 7
    Dernier message: 13/01/2005, 10h30
  4. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01

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