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 :

copier une structure dans un fichier


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut copier une structure dans un fichier
    bonjour,

    J'aimerai copier l'intégralité d'une structure dans un fichier. Je connais la syntaxe en C mais je dois le faire en c++ et je Galere ...

    En C : _os_write(pt_Config->cfa_path_fichier,&et_dataa,&count)
    ca marche tres bien.

    En c++ : BWriter->Write(&pTyDebutCnf,0, 12);
    J'ai essayé ca mais j'ai une erreur 2624....
    j'ai également essayé d'autres solutions mais sans réussite.

    Si quelqu'un sait comment faire ou a une idée..... car là .......

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    c'est du C++.Net ?

    quelle est l'erreur 2624 ? sur quelle ligne ? qu'y a-t-il dans ta structure ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    oui c du C++.net

    ma structure est la suivante :
    struct TyDebutCnf
    {
    char DebVersion[8];
    long int DebLongueur;
    char DebTitre[80];
    };

    j'ai une erreur C2664 impossible de convertir le parametre 1 de TyDebutCnf * en unsigned char __gc[] sur la ligne : BWriter->Write(&pTyDebutCnf,0, 12);

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Et avec un cast devant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BWriter->Write((unsigned char *) &pTyDebutCnf,0, 12);
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 572
    Points
    41 572
    Par défaut
    pas sûr: La fonction semble demander du managé et la structure semble ne pas l'être (d'après le message d'erreur)
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    avec un cast :

    BWriter->Write((unsigned char *)&pTyDebutCnf,0, 12);

    j'ai la meme erreur C2664 ,

    lorsque j'essai avec le meme cast mais sur une autre définition de Write (avec un seul argument)

    BWriter->Write((unsigned char *)&pTyDebutCnf);

    je n'obtiens pas d'erreur mais c'est le résultat dans le fichier qui me donne qu'un seul caractere.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    lorsque je débug, je regarde ma fonction write, et il y a marquer <overloaded>, peut etre un probleme de Buffer overflow ????

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    non, il te faut utiliser un pointeur épingle, __pin

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    un pointeur d'épingle ???

    je connais pas du tout, tu peu me dire a quoi cela consiste please ?

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    j'ai essayé et j'ai une erreur C2440

    est - ce valable sur des types struct ????

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    normalement oui
    sinon, écrit les données les unes après les autres, plutot que tout en une fois

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    Je viens de trouver comment copier la valeur d'un champ d'une structure :

    BWriter->Write(Convert::ToString(pTyDebutCnf.DebVersion));

    Si j'utilise la ligne ci dessus, je ne copie que la valeur du champs et non l'intégralité du champ( avec les octets a 0).

    En fait, je dois copier les 12 premiers octets de la structure TyDebutCnf dont DebVersion fait partit (8octets) et dont DebLongueur fait également partit (4 octets).

    Avez vous une idée sur comment copier l'intégralité d'un champ ( avec les octets a 0 ) ??

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    quelqu'un connait la solution please ??

  15. #15
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    est-ce que tu as essayé un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		 unsigned char tabByte __gc[] = new unsigned char __gc[sizeof(TyDebutCnf)];
    		 System::Runtime::InteropServices::Marshal::Copy(tabByte, 0, &pTyDebutCnf, sizeof(TyDebutCnf));
    		 BWriter->Write(tabByte,0, sizeof(TyDebutCnf));

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    merci pour ta réponse,

    aucune erreur lors de la compilation mais les octets copiés dans le fichier sont tous a 0 !! ????

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    tabByte
    ne contient pas les données des champs de la structure TyDebutCnf,
    la ligne suivante n'effectue pas la copie correctement.
    System::Runtime::InteropServices::Marshal::Copy(tabByte, 0, &pTyDebutCnf, sizeof(TyDebutCnf));

    Savez vous d'ou viens l'erreur ?

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 6
    Points
    6
    Par défaut
    peut etre est-ce a cause de ma structure qui ne contient pas que des unsigned char mais aussi un long Int ?

  19. #19
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    excuse moi, vu que je n'ai pas testé, je n'avais pas vu que j'avais fait une erreur dans la lecture des paramètres de fonctions, et que j'avais inversé la source et la destination ...

    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System::Runtime::InteropServices::Marshal::Copy(tabByte, 0, &pTyDebutCnf, sizeof(TyDebutCnf));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System::Runtime::InteropServices::Marshal::Copy(&pTyDebutCnf, tabByte, 0, sizeof(TyDebutCnf));

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/12/2007, 02h03
  2. Réponses: 17
    Dernier message: 09/03/2007, 18h13
  3. [VBA-E] Copier une macro dans un fichier à l'aide d'une macro
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/01/2007, 20h05
  4. stocker une structure dans un fichier ini?
    Par Mickey.jet dans le forum C
    Réponses: 6
    Dernier message: 13/09/2006, 16h57
  5. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09

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