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 :

[Link] Erreur 2005


Sujet :

Visual C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut [Link] Erreur 2005
    Bonjour tlm,

    J'ai des erreurs de link concernant la fonction DLLMain dans mon projet (qui génére une DLL) et pourtant je n'ai qu'une seule déclaration da la fonction main.

    nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in RedundancyManager.obj
    nafxcwd.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in RedundancyManager.obj; second definition ignored
    Quelqu'un peut-il m'aider?
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Une MFC Regular DLL ne doit pas avoir de DllMain(), mais utiliser celle fournie par MFC (justement dans nafxcwd.lib).

    Si tu veux ta propre DllMain(), tu dois faire une MFC Extension DLL (mais seul un programme MFC pourra l'utiliser).

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Quand je coche l'option "Force File Output" au niveau des settings du projet, les erreurs deviennent des warnings comme suit:

    nafxcwd.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in RedundancyManager.obj; second definition ignored
    nafxcwd.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in RedundancyManager.obj; second definition ignored
    Est ce que ça résoud le problème ou c juste ça le cache?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ça le cache.

    Pour corriger le problème, tu dois changer de type de projet ou adapter ton code au type.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Le type de mon projet est win32 DLL, je comprends pas qu'est ce que MFC me veut??!!

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu es lié à MFC (nafxcwd.lib est une bibliothèque MFC).
    Cherche tout ce qui se rapporte à MFC dans les options de ton projet...

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    J'utilise quelques fonctionnalités de MFC mais je vois pas le rapport avec la fonction main.

    J'ai essayé les trois configurations possibles :
    - Not Using MFC
    - Use MFC in a Static Library
    - Use MFC in a shared DLL

    et j'obtiens toujours les mêmes erreurs.

    la lib nafxcwd.lib, que contient elle au juste?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu es donc sous VC++6.

    Tu dois être en "Not using MFC" et être certain de n'inclure AUCUN header MFC (certains doivent contenir un #pragma comment qui te lie à MFC...)

    Je ne sais pas exactement ce que contient nafxcwd.lib, mais entre autres elle contient une fonction DllMain() pour les MFC Regular DLL (DLL normale utilisant MFC).
    http://msdn2.microsoft.com/en-us/library/e692ht7b.aspx

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    J'ai 3 headers MFC :

    #include <afxdisp.h>
    #include <afx.h>
    #include <afxmt.h>
    Tu penses que c l'origine du problème?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Oui, ou bien une des origines.
    Supprime toute inclusion de ces headers. Après tout, si tu n'utilises pas MFC, tu n'en as pas besoin.

  11. #11
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    c'est ça le problème, j'ai besoin de MFC.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Donc, c'est une :
    Citation Envoyé par Médinoc
    MFC Regular DLL (DLL normale utilisant MFC).
    Donc, tu dois suivre les conventions des MFC Regular DLLs : Au lieu d'utiliser une DllMain() personnelle, tu dois instancier (en variable globale) un objet d'une classe dérivée de CWinApp dont la méthode InitInstance() sera appelée par la DllMain() de MFC...

  13. #13
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    T'es sûr que ça pose un problème qu'en gardant le type de projet (win32 DLL) et en utilisant l'option "Force File Output"?

    J'ai testé la DLL générée et je n'ai pas constaté de problème jusqu'ici.

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    J'ignore si tu as un problème ou non en réalité, mais c'est crade, vachement crade...

    Et l'une des deux DllMain() ne sera pas appelée. Par conséquent, MFC (ou ta DLL) ne sera pas correctement initialisé...

Discussions similaires

  1. Link VC++ 2005 x64
    Par fregolo52 dans le forum Visual C++
    Réponses: 0
    Dernier message: 26/02/2009, 10h12
  2. db link erreur
    Par nicolas_lepot dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/04/2008, 18h12
  3. Erreurs de link wxWidgets et VC++ 2005
    Par Muetdhiver dans le forum wxWidgets
    Réponses: 7
    Dernier message: 18/02/2007, 10h29
  4. Réponses: 1
    Dernier message: 02/11/2006, 20h09
  5. BD LINK erreur ORA-ORA-12154
    Par de LANFRANCHI dans le forum Oracle
    Réponses: 8
    Dernier message: 15/02/2005, 15h39

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