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 :

Créer une DLL


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut Créer une DLL
    Bonjour à tous !

    Voilà j'éssais déséspérement de créer une DLL simple et reutiliser ses fonctions mais sans réussite...

    j'ai suivi un tuto à la lettre.

    Je vais tout expliquer :

    Génération de la DLL (sous codeBlocks) :

    Dabord je créer un nouveau projet de type dynamic link library appelé sdz avec le compilateur GCC.

    Dans ce projet j'ai seulement deux fichier :

    main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int __declspec (dllexport) addition(int entier1, int entier2) {
     
        return entier1 + entier2;
     
    }
    main.h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef __MAIN_H__
    #define __MAIN_H__
     
    int __declspec(dllimport) addition(int entier1, int entier2);
     
    #endif // __MAIN_H__
    Ensuite sans toucher à rien d'autre je compile.

    tout ce passe bien et ca me génrère 3 fichiers dans bin/release : libsdz.a, libsdz.def, sdz.dll

    Utilisation de la DLL :

    Ensuite je créer un nouveau projet de type console en C++ toujours avec gcc :

    j'ai mon main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "main.h"
     
    int main(int argc, char *argv[]) {
        int resultat = 0;
        resultat = addition(3, 7);
        printf("Le resultat est %d\n", resultat);
        printf("Appuyez sur une touche pour continuer...");
        getchar();
        return 0;
    }
    J'ai copié mon main.h ainsi les trois fichiers généré par ma dll à la racinde de mon projet actuel (juste au cas ou)
    ensuite dans projet > build option > onglet linker setting je link libsdz.a.

    et là je compile et je suis confronté à un :

    ||=== azaz, Release ===|

    ld.exe||cannot find -lsdz|

    ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|

    et dans les rares fois ou ce méssage disparait (alors que ma lib est bien linké) je suis confronté à un :
    ||=== z, Release ===|

    obj\Release\main.o:main.cpp: (.text.startup+0x1f)||undefined reference to `_imp___Z8additionii'|

    ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|

    Dans le tuto on me dit de "placez votre fichier dll.dll dans le même répertoire que votre exécutable"
    Mais je n'ai généré aucun exécutables à aucun moments...


    Merci d'avance à tous ceux qui voudrons bien aider ^^

  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
    Regarde dans les options d'édition de liens pour voir où il cherche ses bibliothèques.
    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
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Tu linkes le .a ? Ce fichier n'est-il pas la version statique de la bibliothèque ?

    Peut-on voir ta configuration du linker dans CodeBlocks ? En gros, montre nous ta capture de la fenêtre que je montre à la fin de cet article : http://gradot.wordpress.com/2013/11/...statique-en-c/

    Les traces de CodeBlocks laissent penser que tu as deux projets : z et azaz. Me trompe-je ? Si non, quelles différences entre les 2 ?

  4. #4
    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
    @bktero: Le .a est la bibliothèque statique d'importation de la DLL.
    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Dans le tuto que j'ai suivi, c'est le .a qui est linké :-/
    mais j'ai quand même éssayé de ne pas linké le .a mais le .dll et ca ma fait la meme erreur : cannot find -lsdz.dll...


    oui j'ai deux projet : le premier qui gén_re ma dll pusi j'en recréer un qui utilise la DLL
    Images attachées Images attachées  

  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
    Ce doit être une question de répertoire où chercher les biblithèques statiques (option -L de ld.exe, différente de l'option -l).
    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
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    c'est à dire ? comment le modifier ?

    Si ca peut aider :
    j'ai l'impression que tout allait bien avant je ne n'essais d'installer et d'utiliser le compilateur visual c++ 2005...
    Je n'avais alors pas de problème pour générer une dll...

  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
    Dans "other linker options" tu ajoutes -L C:\hemin\où\la\lib\est\buildée.
    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
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Merci c'était exactement ce qui bloquait !
    l’exécutable se lance et le résultat est parfait !

    Merci Beaucoup à vous deux ! ^^

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

Discussions similaires

  1. Comment créer une dll à parti d'un programme en C
    Par laetous dans le forum Windows
    Réponses: 5
    Dernier message: 02/09/2006, 11h05
  2. [VB6]comment créer une dll
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/04/2006, 14h32
  3. Comment (ou peut on) créer une DLL .NET ?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 02/04/2006, 15h54
  4. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 15h38
  5. [MFC]Créer une DLL BIS
    Par Furtif_00 dans le forum MFC
    Réponses: 5
    Dernier message: 28/06/2004, 14h48

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