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++Builder Discussion :

WriteFile avec builder 6


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Par défaut WriteFile avec builder 6
    J'ai un projet ou je dois utiliser des modem radio afin de communiquer avec une carte Beck, mon probleme est que le modem radio ne supporte que 90 caracteres et que je lui envoie plus de 250 caractere donc il faut que je decoupe par paquet de 90 mais mes boucle ne fonctionne pas .
    Ma question est est ce que on peut mettre la fonction WriteFile fans une boucle while?
    Voici mon code

    cpt_boucle=0;
    while (cpt_boucle=(TailleBuffer/90)+1)
    {
    nbr=0;
    for (int j=0;j<90;j++)
    {
    buf[nbr]=BufferEmettre[j];
    nbr++;
    }
    return WriteFile (
    Handle_Communication, //handle de la communication
    //BufferEmettre, //Texte à transmettre
    &buf,
    //TailleBuffer, //Taille du texte à transmettre
    nbr,
    &TailleEcriture, //nombre de bytes écrit
    NULL);
    }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Bonjour,

    Tout d'abord, utilise la balise [CODE] et des indentations, ton code sera plus lisible.

    Ensuite, plusieurs erreurs se sont glissées dans ton code.

    Ex: quand on regarde l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (cpt_boucle=(TailleBuffer/90)+1)
    {
    on s'aperçoit que tu ne sors jamais de ta boucle (à moins que TailleBuffer passe à -90 mais c'est une constante, je suppose ?), si ce n'est que dans ta boucle, on trouve un return exécuté dans tous les cas. Donc ta boucle ne sert à rien !

    Autre erreur, dans le WriteFile, tu transmets &buf alors qu'il faut justre transmettre buf. D'autre part, buf ne te sert à rien. Pourquoi ne pas utiliser BufferEmettre directement ?

    Bref, ton code n'a aucune chance de fonctionner.

    Sinon, WriteFile fonctionne bien entendu dans une boucle !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Je suppose que ce que tu veux faire est ceci:

    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
    21
    22
    /*
     * retourne le nombre d'octets émis
     */
     
    DWORD EnvoiMessage(char* BufferEmettre, int TailleBuffer,HANDLE Handle_Communication)
    {
        DWORD total_emis = 0;
        DWORD a_envoyer,nb_emis;
     
        while(TailleBuffer)
        {
            a_envoyer = (TailleBuffer>90 ? TailleBuffer : 90);
            if (!WriteFile(Handle_Communication,BufferEmettre,a_envoyer,&nb_emis,NULL))
            {
                return (total_emis+nb_emis);
            }
            total_emis += nb_emis;
            TailleBuffer -= nb_emis;
            BufferEmettre += nb_emis;
        }
        return total_emis;
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Par défaut
    En faite j'ai trouve mon erreur c'etai le return qu'il faut enlever car du coup il l'execute qu'une fois.
    Par contre mon code fonctionne a merveille tel qu'il est.
    Merci quand meme

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

Discussions similaires

  1. comment on peut faire un service avec builder c++
    Par infoactif dans le forum C++Builder
    Réponses: 8
    Dernier message: 11/08/2005, 17h33
  2. XML / Xpath -> une solution avec Builder?
    Par say dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/05/2005, 11h56
  3. erreur link avec Builder C++
    Par axxel dans le forum DirectX
    Réponses: 8
    Dernier message: 20/07/2004, 02h58
  4. XML avec Builder
    Par laury dans le forum C++Builder
    Réponses: 4
    Dernier message: 23/06/2004, 13h50
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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