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 :

comment copier le contenu d'un buffer dans le champ d'une st


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 comment copier le contenu d'un buffer dans le champ d'une st
    comment copier le contenu d'un buffer dans le champ d'une structure ?

    bonjour,

    Je developpe en c++ sous visual.net et j'ai un probleme pour transférer le contenu d'un buffer dans le champ d'une structure de type char[8].

    Please help

  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
    montre nous le code de ta structure et ce que tu veux transferer.
    Pour la copie de chaine, tu peux utiliser strcpy

  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
    struct TyDebutCnf
    {
    char deb_version[8];
    ...
    ...
    };

    //filestream
    FileStream* FichierSrc = new FileStream(this->NomFichier->Text, FileMode::Open, FileAccess::Read);
    //buffer
    Byte Buffer __gc[] = new Byte __gc[TailleBuffer];
    //binaryreader
    BinaryReader* BRead = new BinaryReader(FichierSrc);
    //pointeur vers la structure
    struct TyDebutCnf pTyDebutCnf;
    pTyDebutCnf.deb_version = ...

    a la place des ... j'ai testé plusieur chose mais toujours avec une erreur C2440
    Je ne sais plus quoi utiliser, j'ai pas testé avec strcpy

  4. #4
    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
    ca va pas etre simple là ...

    Premièrement, tu n'as que 7 caractères de disponible dans ta structure, c'est bien ca que tu veux faire ? copier les septs premiers caractères de ton flux ?

    Ensuite, tu as l'air d'utiliser des types managés, tu veux copier une String managée dans un char * ? Est-ce bien ca ? pourquoi ne pas utiliser une String managée en destination ?

  5. #5
    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 pensai avoir 8 caracteres disponible dans ma structure de facon a copier les 8 premier caractere de mon flux.

    en fait le fichier dans lequel je lis au départ est un fichier binaire, pour l'instant je lis les 8 premier octets dans le fichier et je les place dans un buffer __gc[].

    J'aimerai copier le contenu du buffer dans le champ char deb_version[8] de ma structure TyDebutCnf
    comment faire ?
    je suis ouvert a toutes les propositions
    petite précision je vais devoir faire ca pour tout le fichier dans des champs différent.

  6. #6
    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
    je ne vois pas dans ton code au dessus la lecture du flux à proprement parler.
    Mais en admettant que tu l'ais fait, tu le stockes dans une String managé ? Dans ce cas, il faut la convertir en char avec l'objet Marshal

  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
    NbByteLu = BRead->Read( Buffer, 0, 8);

    voici pou la lecture du flux

  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
    moi, ce que je ferais, c'est soit lire directement un String, soit convertir ton Byte en String (méthode ToString), puis je convertirai en char avec l'objet de marshal, puis, je ferais un strcpy dessus

  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
    Oui ca peut etre une oidée qui vaut la peine d'etre essayé.
    Peux tu me donner un exemple 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
    Par défaut
    tu as un exemple de conversion (en c++/cli), à cette adresse http://nico-pyright.developpez.com/t...rialisationXml

  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'essaye de tester ta solution mais j'ai toujours une erreur de conversion ...
    peut etre que je n'utilise pas la bonne syntaxe.

    Faut il activée quuelquechose dans les propriété du projet ?

  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
    effectivement, tu ne peux pas utiliser directement cette syntaxe, vu que c'est du C++/CLI (pour vs2005), et que tu utilises toi VS2003.

    Il faut adapter

  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
    quels sont les différences entre le 2003 et le 2005 ?

  14. #14
    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
    le 2003 utilise des mots clés indigeste pour utiliser les extensions managés.

    Avec VS2005 et l'apparition du C++/CLI, tout est plus standard et normé

  15. #15
    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 n'arrive pas a assigné a pTyDebutCnf.deb_version les valeurs contenue dans le buffer.

    je peux peut etre utiliser Bitconverter ou convert ??

  16. #16
    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
    Je t'ai déjà dit qu'il fallait utiliser l'objet marshal, comme dans l'exemple, il faut juste remplacer les gcnew par new __gc, et autres trucs comme ca

  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 erreur C2143 ou C2440
    Je test deux solutions :
    pTyDebutCnf.deb_version = System::Text::ASCIIEncoding::ASCII->GetChars(Buffer);
    la j'ai une erreur C2440 impossible de convertir wchar t gc[] en char [8]

    ou bien
    public: static vers* ToString(Buffer, NbByteLu);
    et la j'ai une erreur C2143 erreur de syntaxe absence de ; avant public,

    please aidez moi car la je suis a cour d'idée

  18. #18
    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
    je parle chinois ou quoi ?


    pourquoi tu n'utilises pas System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi ???

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/05/2009, 22h45
  2. Réponses: 2
    Dernier message: 27/04/2009, 23h14
  3. Comment copier le contenu d'un Edit dans un autre Edit ?
    Par petitclem dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/04/2009, 16h12
  4. comment copier le contenu d'un dbgrid dans un richedit?
    Par altadeos dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/04/2006, 11h15
  5. Réponses: 5
    Dernier message: 07/01/2006, 16h55

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