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 :

Trackage d'erreur n'apparaissant que dans une dll


Sujet :

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 Trackage d'erreur n'apparaissant que dans une dll
    Bonjour,

    j'ai créé un programme avec des classes cl. Celui-ci fonctionne parfaitement.
    Je veux exporter les classes cl pour les réutiliser ailleurs.
    Je recrée donc un projet dll avec copier coller des classes cl et fonctions à exporter.
    J'ajoute des __declspec(dllexport) à toutes les fonctions que je veux exporter (aussi celles dans les classes).
    Je compile la dll, ok.
    Je crée un nouveau projet pour tester la dll,
    je mets tout ce qu'il faut (linkage, fichiers .h), compile.J'obtiens un executable ... qui plante.
    Je ne sais pas d'où vient l'erreur. Je pensais que c'était l'export des les dll qui était mal fait mais on m'a dit que non sur le tchat.
    L'erreur est générée au niveau de la sortie du programme.

    Je ne sais pas comment tracker le problème et je renvoie un lien vers le code source (complet) pour visual studio : http://www.mediafire.com/?c3in78b9q7wxxtu
    Pouvez-vous m'aider?

    raphchar

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 049
    Points
    33 049
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    __declspec(dllexport) c'est pour l'export; pour l'import il faut __declspec(dllimport) dans le header inclus
    En général on crée une MACRO pour ça, selon qu'on est en DLL_BUILD ou non

    Tu peux directement préfixer la class pour exporter la classe entière et chacune de ses fonctions.

  3. #3
    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
    Citation Envoyé par Bousk Voir le message
    __declspec(dllexport) c'est pour l'export; pour l'import il faut __declspec(dllimport) dans le header inclus
    Bien sûr mais linker un .lib est aussi efficace et c'est ce que je fais, d'ailleurs aucun problème de ce coté-là.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 049
    Points
    33 049
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par raphchar Voir le message
    Bien sûr mais linker un .lib est aussi efficace et c'est ce que je fais, d'ailleurs aucun problème de ce coté-là.
    ?

    Pour utiliser une dll il faut
    - créer la dll
    - avoir le .lib correspondant
    - inclure les header correct et correctement écrits (dllimport)
    - linker le .lib

  5. #5
    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
    Citation Envoyé par Bousk Voir le message
    ?

    Pour utiliser une dll il faut
    - créer la dll
    - avoir le .lib correspondant
    - inclure les header correct et correctement écrits (dllimport)
    - linker le .lib
    inclure les header correct et correctement écrits (dllimport)->ok mais bon même en le modifiant ca ne change rien au problème

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 049
    Points
    33 049
    Billets dans le blog
    4
    Par défaut
    Bon, maintenant... l'application qui plante...
    oui certes, mais t'as pas plus vague ?
    crash ? exception ? fonctionnement incorrect ? ne démarre même pas ? moment précis ? action précise ?
    si la dll est de toi et tu en as le code source, tu peux la debuger.

  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
    Citation Envoyé par Bousk Voir le message
    Bon, maintenant... l'application qui plante...
    oui certes, mais t'as pas plus vague ?
    crash ? exception ? fonctionnement incorrect ? ne démarre même pas ? moment précis ? action précise ?
    si la dll est de toi et tu en as le code source, tu peux la debuger.
    Ben oui la dll est de moi et alors? Je n'ai rien qui m'indique d'où vient le problème (à priori un débordement de pile, (pas la variable stack)). Je ne peux rien tracker. L'erreur intervient à priori après le return de main()

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 049
    Points
    33 049
    Billets dans le blog
    4
    Par défaut
    Et alors tu as la main complète sur ta dll. Donc la possibilité de debug, mettre des traces, breakpoint etc... donc bel et bien traquer le bug.
    Une erreur après le return du main peut venir d'un problème de libération mémoire. De suppression d'un pointeur non null déjà supprimé. Vérifier les static.

  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
    Citation Envoyé par Bousk Voir le message
    Et alors tu as la main complète sur ta dll. Donc la possibilité de debug, mettre des traces, breakpoint etc... donc bel et bien traquer le bug.
    Une erreur après le return du main peut venir d'un problème de libération mémoire. De suppression d'un pointeur non null déjà supprimé. Vérifier les static.
    Comment? J'ai vérifié le delete et tout est bon... alors "suppression d'un pointeur non null déjà supprimé" n'est pas le cas.

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/05/2006, 09h21
  2. [VB6] Erreur durant la recherche dans une table
    Par quaife dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2006, 17h21
  3. erreur: ...ANSI_NULLS et ANSI_WARNINGS.. dans une storedProc
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/12/2005, 21h24
  4. Réponses: 9
    Dernier message: 19/10/2005, 04h35
  5. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20

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