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 :

Creation DLL win 32 sous Visual Studio 08


Sujet :

Visual C++

  1. #1
    Membre à l'essai
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Creation DLL win 32 sous Visual Studio 08
    Bonjour,

    Je souhaite créer une dll win 32 (avec convention standard et un fichier DEF) sous Visual Studio 2008.

    J'ai donc créer sous VS08 un projet Win32->DLL avec le fichier maDllWin32.cpp contenant le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
    extern "C"
    {
    	__declspec(dllexport) void DisplayHelloFromDLL()
    	{
    		printf ("Hello from DLL! \n");
    	}
     
    	int __stdcall f(void)
    	{
    		return 0;
    	}
    }
    Q1: Y a t'il une commande à lancer pour générer le fichier .DEF ?

    Q2: Lorsque je génère le projet dans le répertoire debug de la solution pas de MaDllWin32.dll seulement des fichiers du gere MaDllWin32.dll.embed.manifest.
    Comment faire pour générer le fichier maDllWin32.Dll?

    Merci pour votre aide!

  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
    Bonjour,
    1. Je ne connais rien pour générer un fichier .def, normalement tu es censé le taper toi-même.
    2. Vérifie le Output Directory de ton projet: Il peut être différent du Intermediate Directory.
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Bonjour Médinoc,

    1. Peux tu m'orienter ou m'indiquer quelles sont les règles de création du .DEF?
    2. En effet, l'Output Directory et L'Intermediate Directory était bien différent, bien vu

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour


    Tu prend un notepad, tu cree un fichier maDllWin32.def

    dedans tu ecris

    ; maDllWin32.def : Declares the module parameters for the DLL.

    LIBRARY "maDllWin32"
    DESCRIPTION 'maDllWin32 Windows Dynamic Link Library'

    EXPORTS
    ; Explicit exports can go here

    DisplayHelloFromDLL @1
    Tu l'ajoute à ton projet et tu compile.

    Cordialement

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    L'utilisation du __declspec(dllexport) suffit... pas besoin de .def

    Le .def indique au compilateur quelle fonction il doit "montrer"... Et son utilité est uniquement quand on a pas de __declspec(dllexport) !

    Le .lib indique à un client de la DLL quelles fonctions sont définies et comment linker avec cette DLL... Il est généré automatiquement.

    Regardes le nom ainsi que le chemin complet de la DLL dans les propriétés du projet (partie 'linker')... Normalement tu dois avoir une DLL, et un .LIB
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    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
    Le .def sert également à dire sous quel nom une fonction doit être exportée.

    Vu qu'il Il est par ailleurs recommandé d'exporter ses fonctions __stdcall sans leur décoration (comme c'est fait dans l'API Windows), cela implique l'usage d'un fichier .def...
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Je vous remercie pour vos réponses qui m'aide à avancer.

    Voici ce que j'ai compris concernant le .DEF:
    • Exporte une fonction comme le fait __decspec(dllexport) mais sans décoration contrairement à __stdcall.
    • indique au compilateur quelles fonctions montrer
    • Défini le nom d'export de la fonction


    Du coup, côté client dll, que faut il utiliser :
    MaDllWin32.dll + MaDllWin32.h ou MaDllWin32.dll + MaDllWin32.h + MaDllWin32.Lib ?

    Car j'ai l'erreur suivante:
    Erreur 1 error LNK2019: symbole externe non résolu "int __cdecl f(void)" (?f@@YAHXZ) référencé dans la fonction _wmain ClientDll.obj ClientDll
    Merci

  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 519
    Points
    41 519
    Par défaut
    Ça dépend de la façon dont tu utilises la DLL.
    Pour ce qu'on appelle entre autres une liaison dynamique implicite, il faut utiliser le .lib (bibliothèque statique d'importation).
    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
    Membre à l'essai
    Profil pro
    Ingénieur industrialisation et test
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur industrialisation et test
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Bonjour Médinoc,

    Effectivement, je souhaiterais utiliser cette DLL de facon liaison dynamique implicite.
    Je tente donc d'ajouter le fichier.lib dans propriétés projet->Éditeurs de liens->Entrée-> Dépendances supplémentaires: $(OutDir)\maDll.lib

    Malheureusement j'ai toujours un fatal error LNK 1104: impossible d'ouvrir le fichier objet

    Des idées sur l'origine du problème ?

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

Discussions similaires

  1. créer une dll sous visual studio
    Par kaisser dans le forum C#
    Réponses: 6
    Dernier message: 29/08/2009, 14h12
  2. Déboggage d'une DLL sous Visual Studio
    Par CodeCRC dans le forum Visual C++
    Réponses: 6
    Dernier message: 09/01/2009, 12h16
  3. Réponses: 3
    Dernier message: 16/06/2008, 15h23
  4. problème de DLL sous visual studio 2008
    Par kira09 dans le forum C++
    Réponses: 2
    Dernier message: 12/06/2008, 12h50
  5. Lier la dll Magick++ sous visual studio 2003
    Par Julien1138 dans le forum Visual C++
    Réponses: 1
    Dernier message: 21/12/2006, 13h03

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