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

MFC Discussion :

[VC++ 6.0] - Linkage lib C++ dans C


Sujet :

MFC

  1. #1
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut [VC++ 6.0] - Linkage lib C++ dans C
    Bonjour à toutes et à tous,

    j'ai développée une petite lib en C++ pour la gestion des process.
    Jusque là tout va bien, à chaque fois que je l'ai implémentée dans un prog C++ avec MFC je n'ai pas rencontré de soucis.

    Aujourd'hui je souhaite l'intégré dans un prog C.
    Pour que le .h de cette lib soit reconnu et lisible par le compilo j'ai mis 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    #ifdef  __cplusplus   
    extern "C" {
    #endif
     
    #if !defined(_G2MMANAGEPROCESS_C__HEADER_)
    #define _G2MMANAGEPROCESS_C__HEADER_
     
    int findPID(/// PID a trouver
                    short _PID) ;
     
    void FindProcess(/// nom du process
                      char * nameProcess,
                      /// valeur du PID trouvé
                      short * valPID) ;
     
    int ClosedProcess(/// nom du process
                      char * nameProcess) ;
     
    #endif // !defined(MANAGE_PROCESS_H_)
     
    #ifdef  __cplusplus   
    }
    #endif
    Par rapport à ma lib de départ, j'ai rajouté le principe du Extern "C" pour être reconnu dans le prog C.
    De cette manière je n'ai pas l'erreur de non reconnaissance de symbole (non de la fonction utilisée).

    Par contre j'ai un autre problème de linkage, :
    nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMT.lib(new.obj)
    ..\..\..\binary\A02120-A02123_NZ_REMORA\g2mConsigne\g2mConsigne.exe : fatal error LNK1169: one or more multiply defined symbols found
    A noter que ma lib et mon appli sont toutes les deux en multithread et que je développe en VC++ 6.00

    Auriez vous une idée du problème ?


    par avance

    Alice

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    mono/multithread, et dll/static : il faut les mêmes réglages pour les 2.

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    rajoute dans le link category input /ignore libraries:
    LIBCMT.lib

  4. #4
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    > Aurelien.Regat-Barrel

    Pour la lib j'ai Multithreaded DLL et pour l'appli Multithreaded.
    Crois tu que cela puisse jouer ?

    > Farscape

    J'avais déjà une librairie d'ignorée, du coup j'ai mis :
    libc.lib LIBCMT.lib
    Mais ça me fait toujours la même erreur ......


  5. #5
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Alice9
    > Aurelien.Regat-Barrel

    Pour la lib j'ai Multithreaded DLL et pour l'appli Multithreaded.
    Crois tu que cela puisse jouer ?
    oui, il faut mettre les 2 pareil.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    je pense que le mélange mono/multi c'est pas terrible.
    plus les effets de bord possibles avec la CRT...
    vaut mettre tout en multi thread.

  7. #7
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Quand j'essaie de passer ma lib en multithreaded seule, l'erreur suivante apparait :
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxver_.h(130) : fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
    j'utilise les librairies afx.h et afxwin.h et je pense que c'est à cause de ça....

    Et je ne crois pas que cela soit logique de compiler mon appli en multithreaded Dll ...

    Me trompes je ?

  8. #8
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Ben justement mon appli c'est du Multithread....

    et ma lib du multithread DLL ...

    j'ai du mal à comprendre votre histoire de mono du coup ....

  9. #9
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Pour être plus précise :

    J'intègre ma lib dans mon appli. J'ajoute l'include du .h de ma lib dans un des fichiers de mon appli.

    Là quand je compile puis que je link pas de problème.

    Mais quand je fais appelle dans mon programme à une des fonctions de ma lib, j'ai l'apparition de l'erreur citée plus haut !

    ça vous éclaire un peu sur mon problème ?



  10. #10
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Finalement j'ai abandonner l'idée de réutilisé la lib C++ dans mon appli C.

    J'ai récupéré le contenu de ma fonction de récupération du PID d'un process d'après son nom et je l'ai implémenté dans mon prog en C.

    ça fonctionne bien !

    encore pour tout et pour le dérangement....

    (je peux pas me permettre de chercher plus longtemps ce qui ne va pas avec ma librairie)

    Alice

  11. #11
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Alice9
    Quand j'essaie de passer ma lib en multithreaded seule, l'erreur suivante apparait :
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxver_.h(130) : fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
    j'utilise les librairies afx.h et afxwin.h et je pense que c'est à cause de ça....

    Et je ne crois pas que cela soit logique de compiler mon appli en multithreaded Dll ...

    Me trompes je ?
    oui
    la dll en question ce n'est pas la tienne, c'est une dll de VC++. L'erreur t'informe que le projet que tu compiles dois être compilé en multithread dll.

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

Discussions similaires

  1. Import de lib Struts dans un bean
    Par 19cmos83 dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/05/2008, 11h48
  2. Installation lib source dans BCB 2007
    Par Takusen dans le forum C++Builder
    Réponses: 5
    Dernier message: 11/06/2007, 10h39
  3. [Link] lib static dans une lib dynamique
    Par TobyKaos dans le forum C++
    Réponses: 3
    Dernier message: 15/05/2007, 10h25
  4. Linkage, lib, dll toussa
    Par Stevie Wonder dans le forum Visual C++
    Réponses: 1
    Dernier message: 03/11/2006, 22h48
  5. [GD] Ajouter la lib GD dans PHP
    Par pyramix dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/09/2006, 13h41

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