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

Bibliothèques Discussion :

Compatibilité des API


Sujet :

Bibliothèques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Compatibilité des API
    Bonjour,

    J'ai une question concernant les API disponibles. Sous gtk, on dispose d'une API en C. Alors que sous Qt, l'API est plutôt en C++. J'aimerais savoir si ces API sont interchangeables.
    Autrement dit, un programme en C peut-il accéder facilement à une API écrit en C++ et un programme en C++ peut-il accéder sans problème à une API écrit en C ou des adaptations seraient nécessaires ?

    Merci à l'avance de vos réponses et cordialement.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    A priori aucun problème.

  3. #3
    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 518
    Points
    41 518
    Par défaut
    Un programme en C ne peut pas accéder directement à une API C++.
    Par contre, une bibliothèque programmée en C++ peut avoir une API C, une API C++, ou les deux. Généralement, quand une bibliothèque expose les deux APIs, l'une est un wrapper sur l'autre.
    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.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Accès de C à une API C++
    Bonsoir,

    Je suis justement tombé sur ce problème. Un programme écrit en C doit accéder à une bibliothèque dont l'API est apparemment proposée uniquement en C++. J'aimerais savoir s'il y a un moyen simple pour que cette dernière en C++ soit accesible par un programme en C.

    Merci à l'avance et cordialement

  5. #5
    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 518
    Points
    41 518
    Par défaut
    Le seul moyen "simple" que je connais, c'est d'écrire un wrapper: Une bibliothèque en C++ avec une API C.

    Et tu ne pourras pas utiliser les classes RRIF avec ça, seulement les classes qu'on instancie sur le tas.

    Exemple en cours d'écriture...
    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.

  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 518
    Points
    41 518
    Par défaut
    Exemple de classe :
    Code C++ : 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
    26
    27
    28
    29
    30
    31
    32
    //UneClasse.hpp
    #ifndef H_UNECLASSE_20081025_1437
    #define H_UNECLASSE_20081025_1437
     
    /*
    Ceci est une classe faite pour être utilisée sur le tas.
    Elle possède une sémantique d'entité, et par conséquent,
    n'est ni copiable, ni assignable, ni swappable.
    */
    class UneClasse
    {
    public:
    	//Constructeurs et destructeur
    	UneClasse(void);
    	explicit UneClasse(int i);
    	~UneClasse(void);
    private:
    	//Copie et affectation interdites
    	UneClasse(UneClasse const &);
    	UneClasse& operator=(UneClasse const &);
     
    public:
    	//Accesseurs bidon
    	int GetI(void) const;
    	void SetI(int i);
     
    private:
    	//Variables membres
    	int m_i;
    };
     
    #endif// ! H_UNECLASSE_20081025_1437
    Code C++ : 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
    26
    //UneClasse.cpp
    #include "UneClasse.hpp"
     
    //Constructeurs et destructeur
    UneClasse::UneClasse(void)
     : m_i(0)
    { }
     
    UneClasse::UneClasse(int i)
     : m_i(i)
    { }
     
    UneClasse::~UneClasse(void)
    {
    }
     
    //Accesseurs
    int UneClasse::GetI(void) const
    {
    	return m_i;
    }
     
    void UneClasse::SetI(int i)
    {
    	m_i = i;
    }
    Et le wrapper C++ extern "C" :
    Code C/C++ : 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
    26
    27
    28
    29
    /*UneClasseC.h : Ce header doit être compilable en C comme en C++*/
    #ifndef H_UNECLASSEC_20081025_1444
    #define H_UNECLASSEC_20081025_1444
     
    #ifdef __cplusplus
    class UneClasse;
    #else
    struct UneClasse;
    typedef struct UneClasse UneClasse;
    #endif
     
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C extern
    #endif
    #endif
     
    /*Constructeurs et destructeur*/
    EXTERN_C UneClasse * UneClasse_new(void);
    EXTERN_C UneClasse * UneClasse_new_int(int i);
    EXTERN_C void UneClasse_delete(UneClasse *pThis);
     
    /*Accesseurs*/
    EXTERN_C int UneClasse_GetI(UneClasse const *pcThis);
    EXTERN_C void UneClasse_SetI(UneClasse *pThis, int i);
     
    #endif/* ! H_UNECLASSEC_20081025_1444*/
    Code C++ : 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
    26
    27
    //UneClasseC.cpp
    #include "UneClasseC.h"
    #include "UneClasse.hpp"
     
    //Constructeurs et destructeur
    EXTERN_C UneClasse * UneClasse_new(void)
    {
    	return new UneClasse;
    }
    EXTERN_C UneClasse * UneClasse_new_int(int i)
    {
    	return new UneClasse(i);
    }
    EXTERN_C void UneClasse_delete(UneClasse *pThis)
    {
    	delete pThis;
    }
     
    //Accesseurs
    EXTERN_C int UneClasse_GetI(UneClasse const *pcThis)
    {
    	return pcThis->GetI();
    }
    EXTERN_C void UneClasse_SetI(UneClasse *pThis, int i)
    {
    	pThis->SetI(i);
    }
    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.

Discussions similaires

  1. Compatibilité des API IGN avec ArcGIS online ?
    Par viandor dans le forum IGN API Géoportail
    Réponses: 23
    Dernier message: 30/08/2016, 07h46
  2. Compatibilité des API multithread
    Par unomadh dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 09/08/2011, 23h24
  3. Réponses: 4
    Dernier message: 11/02/2008, 14h26
  4. Utilisation des API MySQL // ADO ou BDE ? (sujet 2)
    Par rohstev dans le forum C++Builder
    Réponses: 8
    Dernier message: 07/11/2003, 10h50
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

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