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 :

Intégration de code C++ dans un programme en C


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 29
    Points : 33
    Points
    33
    Par défaut Intégration de code C++ dans un programme en C
    Bonjour à tous,

    Je sais que la question a déjà été posée, j'ai fait des recherches, mais ça ne m'a pas permis de résoudre les soucis.
    J'ai un programme écrit en C que je dois modifier, et dans lequel je dois utiliser une classe C++.

    J'ai donc écrit ma classe normalement, et j'ai rajouté 2 fonctions (dans un fichier à part) qui permet de gérer cette classe sans en restant appelable (selon moi) depuis une source C.

    le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef _CLIENTWRAPPER_H_
    #define _CLIENTWRAPPER_H_
     
    #include "MTClient.h"
     
    static MTClient* theClient;
     
    extern "C" void initClient();
    extern "C" void removeClient();
     
    #endif
    et le .cpp
    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
     
    #include "clientWrapper.h"
     
    extern "C"
    {
    	void initClient()
    	{
    		theClient = new MTClient();
    		theClient->run();
    	}
    }
     
    extern "C"
    {
    	void removeClient()
    	{
    		theClient->stop();
    		delete theClient;
    	}
    }
    Lorsque j'inclue clientWrapper.h dans mon .c et que je compile (VC2008) j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2>c:\program files\microsoft visual studio 9.0\vc\include\eh.h(30) : fatal error C1189: #error :  "eh.h is only for C++!"
    Je comprends pas à quoi c'est du, j'ai vérifié, VS compile bien en C++ (du moins c'est ce que je lui demande)

    Vous auriez une idée de comment fixer le problème ?
    merci d'avance !

  2. #2
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Dans ces cas-là, premier réflexe, taper le numéro de l'erreur dans google.

    Et là, on trouve ça : http://msdn.microsoft.com/en-us/libr...29.aspx?ppud=4

    Qui indique que ce n'est pas une erreur, mais une macro volontairement mise dans "eh.h" pour en empêcher la compilation en C.

    La solution est donc de faire en sorte que tes sources C n'incluent pas ce fichier-là. (qui l'est probablement par le jeu d'inclusions en "en cascade")

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 29
    Points : 33
    Points
    33
    Par défaut
    Oui j'avais trouvé ça. Cependant je n'inclue jamais explicitement ce fichier !

    Et s'il l'est automatiquement lorsqu'on a des sources c++, je vois mal comment éviter de l'inclure dans le .c, puisque je dois forcément inclure un header qui décrit du c++, non ?

  4. #4
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Le problème doit venir de l'inclusion de "MTClient.h" dans ton "CLIENTWRAPPER"

    Le mieux est de n'inclure AUCUN fichier dans le .h de ton wrapper.

    Ensuite tu inclues les .h nécessaires dans le cpp du wrapper.

    Et pour éviter de passer par une variable statique, tu peux utiliser le pattern singleton, comme ça, pas besoin de déclarer "static MTClient* theClient;" dans le .h

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 29
    Points : 33
    Points
    33
    Par défaut
    Je vais voir pour utiliser un singleton oui.
    On verra comment ça passe !

    Merci pour tes réponses

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 29
    Points : 33
    Points
    33
    Par défaut
    Parfait tout fonctionne.

    Merci beaucoup !

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

Discussions similaires

  1. Intégration du code C++ dans du code Java
    Par mehdiing dans le forum Langage
    Réponses: 3
    Dernier message: 01/05/2007, 09h43
  2. Réponses: 4
    Dernier message: 22/04/2007, 08h31
  3. introduire du code assembleur dans un programme C++
    Par hzaki1986 dans le forum C++
    Réponses: 1
    Dernier message: 14/04/2007, 17h14
  4. compiler du code c dans un programme cpp
    Par momofiant dans le forum C++
    Réponses: 1
    Dernier message: 05/01/2007, 10h39
  5. Réponses: 11
    Dernier message: 30/01/2006, 16h26

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