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++ Discussion :

DLL : création, différentes méthodes ?


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut DLL : création, différentes méthodes ?
    Bonjour,

    Je dois faire une DLL, j'ai déjà mon code mais je suis un peu perdu pour la créer parce que j'ai vu plusieurs façons de faire et du coup je mélange tout !!

    Pour info, ce que je mets dans ma DLL, c'est des classes...
    Mais comme j'ai vu, de créer directement un objet dans le programme qui utilise la dll n'est pas recommandé, rien ne m'empêche de créer 2 fonctions pour créer et supprimer un objet de ce type si il faut.

    Mais ce n'est pas la le problème, je ne sais pas trop quelle méthode utiliser pour faire ma DLL et donc en fonction de cette méthode, comment elle s'utilise après...

    J'ai essayé les 3 différentes façons de créer une DLL sous Visual :
    - An empty DLL project
    - A simple DLL project
    - A DLL that exports some symbols

    Il n'y a que le 3ème qui m'a généré un .lib mais je croyais qu'il le fallait ce .lib ?
    Il sert quand ? On en n'a pas besoin pour le programme qui va utiliser la DLL ?

    Enfin, si quelqu'un peut m'en dire un peu plus..

    Merci
    Bonne journée

  2. #2
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    une dll est une librairie. Pour pouvoir l'utiliser dans un autre programme, il faut que les notions que tu y définis (fonction, variables ou autre ) soient visibles de l'extérieur. Voilà pourquoi il te faut choisir le troisième choix qui te propose d'exporter, cad de rendre visible, tes notions.
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  3. #3
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    j'oubliais : le ficlhier .lib permet d'effectuer une édition de lien statique sur ta librairie. Mais tu n'en n'a pas forcément besoin si tu ne charges ta librairie qu'à l'exécution
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    donc la 3ème méthode, c'est avec les __declspec(ddlexport) etc...
    Et donc avec cette méthode, je peux rendre accessible directement une classe ?
    Pas besoin de passer par des méthodes pour créer et supprimer les objets de ce type ?

    Et dans le programme qui l'utilise, j'ai juste besoin d'inclure le .h ?


    Parce que en fait, ce que j'ai testé avec des DLL qu'on utilise déjà pour un programme, c'est que il faut le .lib mais si je crée directement un objet du type qui est dans la classe, après lors du delete, ca crash, voir un autre post ou j'en parle.


    Donc, c'est les 2 grosses façons de faire ?
    - soit avec l'export et import du coup, et on a juste besoin du .h dans le programme final

    - soit avec le .lib mais il nous faut quand même les .h non ?


    Dans ces 2 cas, on ne fait pas de chargement dynamique ? avec LoadLibrary... ?

  5. #5
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Il te faut de toute façons les header pour que tes déclarations de variables ou de méthodes de ta dll soient reconnues par le compilateur.
    Il te faut le .lib si tu veux faire une édition de lien statique.
    Et, normalement, tu peux construire un objet d'une classe déclarée dans ta librairie...
    Quand tu dis que ça crasche, c'est la compilation ou l'exécution ?
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  6. #6
    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 g0up1l Voir le message
    j'oubliais : le ficlhier .lib permet d'effectuer une édition de lien statique sur ta librairie. Mais tu n'en n'a pas forcément besoin si tu ne charges ta librairie qu'à l'exécution
    Non non

    Quand tu crées une librairie statique ou dynamique (DLL donc) tu as toujours un .lib qui est généré.

    Quand tu utilises cette librairie dans un projet statique ou dynamique (DLL donc) ti dois toujours te linker avec le .lib.

    En général maintenant, le .lib d'une librairie statique est plus gros que le .lib d'une librairie dynamique.

    Pour schématiser, le .lib d'une librairie statique contient du code et des données, le .lib d'une librairie dynamique contient des références à des points d'entrée dans la DLL

    Attention, cette explication n'est pas valable si tu charges tes DLL avec LoadLibrary() et utilises les fonctions avec GetProcAddress(), mais c'est une utilisation particulière des DLL
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Non non

    Quand tu crées une librairie statique ou dynamique (DLL donc) tu as toujours un .lib qui est généré.
    oui bien sûr, ce que je voulais dire c'est que si tu charges la DLL avec LoadLibrary, tu n'as pas besoin de linker sur le .lib
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

Discussions similaires

  1. Différentes méthodes d'affichage d'un bitmap
    Par atomicJo dans le forum MFC
    Réponses: 5
    Dernier message: 07/02/2008, 19h06
  2. Réponses: 3
    Dernier message: 09/11/2007, 14h08
  3. [débutant] BD d'images numériques: création et méthode d'accès
    Par thibouille dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/11/2007, 18h23
  4. Réponses: 2
    Dernier message: 24/08/2007, 17h27
  5. Différentes méthodes de détermination du zéro d'une fonction
    Par Desperados dans le forum Mathématiques
    Réponses: 4
    Dernier message: 30/05/2006, 22h29

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