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 :

Utiliser du C dans du C++


Sujet :

C++

  1. #1
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut Utiliser du C dans du C++
    Bonjour,

    Je doit utiliser des fonctions et des structures C dans du code C++,
    j'ai bien pris soin de proteger les en-tetes C par un "extern C".

    Es ce que cela me permet d'ecrire les differantes instances des structres (alloué par new) dans un fichier avec la primitive fwrite, et de la recharger dans un programme pur C (alloué avec malloc) et charge avec fread.

    Apparement cela fonctionne apres un petit teste rapide, mais ne crains que ce mellange d'allocations memoire ne pose probleme (je n'ai pas encore oser ecrire dans un fichier avec un ostream, je ne pense pas que cela fonctionne a la lecture avec fread ?)
    all your base are belong to us.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Non, il n'y a pas de problème si l'allocation et la désallocation sont faites par le même langage (pas de malloc avec un delete par exemple). Pour le reste, si c'est ton code C qui lit et écrit la structure, sachant qu'elle est déclarée en C, compilée en C, ... ça va passer.

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Es ce que cela me permet d'ecrire les differantes instances des structres (alloué par new) dans un fichier avec la primitive fwrite, et de la recharger dans un programme pur C (alloué avec malloc) et charge avec fread.
    Dans tous les cas c'est mal. Le jour où ton compilateur décide, pour une raison x ou y, que, int n'est plus sur 32bits mais 64, par exemple, tout ton
    code va foirer. Il y a aussi les problème de petits et grands-boutistes.

    Tu gagneras (sur le long terme) à définir un format de fichier binaire correctement spécifié.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Dans tous les cas c'est mal. Le jour où ton compilateur décide, pour une raison x ou y, que, int n'est plus sur 32bits mais 64, par exemple, tout ton
    code va foirer. Il y a aussi les problème de petits et grands-boutistes.

    Tu gagneras (sur le long terme) à définir un format de fichier binaire correctement spécifié.
    Sans compter que s'il s'agit d'échanger des données entre 2 exécutables qui tournent en même temps, il existe d'autre solution que le fichier temporaire;

  5. #5
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    justement, je compte compiler le loader sous power pc 64, et je programme et créer les fichiers sous intel 32... je me doutais que cela n'allai pas être terrible... comment je peut faire pour avoir des fichier portable ?

    Les exe n'echangent pas les données en meme temps, de plus les fichiers ne sont pas temporaire mais seront eventuellement relu ulterieurement.
    all your base are belong to us.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par TheDrev Voir le message
    justement, je compte compiler le loader sous power pc 64, et je programme et créer les fichiers sous intel 32... je me doutais que cela n'allai pas être terrible... comment je peut faire pour avoir des fichier portable ?
    Tu ne laisses pas le compilateur décider comment écrire un int (ou tout autre type) mais tu définis ton format de fichier binaire. Ensuite tu te fais les interfaces d'écriture et de lecture de ton format de fichier.
    Je crois que tu peux aussi utiliser Boost.Seralization pour ça.

    Citation Envoyé par TheDrev Voir le message
    Les exe n'echangent pas les données en meme temps, de plus les fichiers ne sont pas temporaire mais seront eventuellement relu ulterieurement.
    J'ai préféré poser la question au cas où...

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    En plus tu vas t'amuser avec des différences big endian/little endian...

  8. #8
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    d'acc, a partir d'ici je vais utiliser du C (même si c'est dans du C++, cette partie marche).

    Comment faire pour definir un format de fichier binaire ??

    Merci !
    all your base are belong to us.

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    d'acc, a partir d'ici je vais utiliser du C (même si c'est dans du C++, cette partie marche).
    Personne n'a suggéré d'utiliser du C, tu peux très bien tout faire en C++.

    Comment faire pour definir un format de fichier binaire ?
    De la même manière qu'on spécifie un fichier texte. Il faut dire sur combien de bits tu code tes entiers, le boutisme utilisé... Idem pour les chaînes de carctères, et pour toute données que tu dois utiliser.

    Comme ce genre de problème a été maintes et maintes fois été traité, il existe des bibliothèques de sérialisation qui servent à faire ça. boost::serialization doit sûrement pouvoir t'aider, mais je ne l'ai jamais utilisé, donc je ne peux pas t'en dire plus. Sinon, regarde du côté de l'encodage BER.

  10. #10
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    en fait je dois utiliser le C pour la partie sérialisation , car le chargeur coté client et en C. J'ai trouvé la libtpl qui fait de la sérialisation binaire portable, sinon il faut écrire en ASCII...

    Ceci dis je regarderai dans BOOST quand l'occasion se presentera.

    Merci !
    all your base are belong to us.

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

Discussions similaires

  1. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  2. Utilisation fonction définie dans un .Dll
    Par jeab. dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2004, 16h23
  3. Réponses: 3
    Dernier message: 11/03/2004, 10h58
  4. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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