Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fabien LE LEZ
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data) { char * d = new char[data.length()];
DWORD o; if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM");
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Je verrais plutôt un truc de ce goût-là :
std::string GetData (size_t taille) { std::vector<char> buf (taille); if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end()); }
Si tu veux vraiment garder la même convention d'appel (bancale AMHA, m'enfin bon...) :
void GetData (std::string& dest) // bof... { size_t const taille= buf.size(); std::vector<char> buf (taille); if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end()); }
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data)
{
char * d = new char[data.length()];
DWORD o;
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
throw Exception("Impossible d'envoyer la séquence au port COM");
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Je verrais plutôt un truc de ce goût-là :
std::string GetData (size_t taille)
{
std::vector<char> buf (taille);
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
throw Exception("Impossible d'envoyer la séquence au port COM");
// T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end());
}
Si tu veux vraiment garder la même convention d'appel (bancale AMHA,
m'enfin bon...) :
void GetData (std::string& dest) // bof...
{
size_t const taille= buf.size();
std::vector<char> buf (taille);
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
throw Exception("Impossible d'envoyer la séquence au port COM");
// T'es sûr que c'est le bon message ?
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data) { char * d = new char[data.length()];
DWORD o; if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM");
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Je verrais plutôt un truc de ce goût-là :
std::string GetData (size_t taille) { std::vector<char> buf (taille); if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end()); }
Si tu veux vraiment garder la même convention d'appel (bancale AMHA, m'enfin bon...) :
void GetData (std::string& dest) // bof... { size_t const taille= buf.size(); std::vector<char> buf (taille); if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data) { char * d = new char[data.length()];
DWORD o; if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM" );
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Et s'il n'y en a pas, ça risque d'être encore plus amusant, non :-)? (Pense à comment std::string cherche la longueur quand tu ne lui donne pas explicitement.)
Je ne connais pas la fonction ReadFile, mais il doit bien être possible d'en récouperer la longueur lue quelque part. Puis :
Pendant que j'y suis, je ne vois pas de o ni de data non plus. L'idée d'utiliser un std::vector< char > me semble bonne, mais
std::vector< char > buf( taille ) ; ssize_t lu = read( hPortCOM, &buf[ 0 ], buf.size() ) ; if ( lu == -1 ) { throw Exception( "Erreur de lecture" ) ; } return std::string( buf.begin(), buf.begin() + lu ) ;
. Convertir le read en ReadFile, et ça doit faire l'affaire sous Windows aussi.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end()); }
Si tu veux vraiment garder la même convention d'appel (bancale AMHA, m'enfin bon...) :
Je doute que ce soit le cas ici, mais ça m'est déjà arrivé de passer un Container& plutôt que de renvoyer un Container pour des motifs de performance. (Dans mon cas, le Container, c'était un pré-STL équivalent à std::list. Avec en moyen 60.000 entrées.)
J'adore :-). On démande à l'objet qui n'existe pas sa taille pour qu'on puisse lui dire d'avoir cette taille.
(Manifestement, il te manque du sommeil, ou du café, ou quelque chose. Mais il faut avouer, le résultat ici pose une question métaphysique assez intéressante.)
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
Et on continue. Ayant soigneusement construit le buf avec la taille qu'il a dit qu'il a, on ne s'en sert plus, lui préférant des symboles jamais vus avant. (Je suis en train de supposer que hPortCOM est une variable globale, vue que Michael ne l'a pas déclarée non plus. Et je suis sûr qu'avec un peu plus de sommeil, tu lui aurais indiqué que ce n'est pas une bonne idée non plus.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end());
Au moins on sait ce que la chaîne va contenir : que des char() (c-à-d des ' ') :-). (Et je suppose que c'est le sommeil aussi qui t'a fait utiliser l'opérateur d'affectation, plutôt que la fonction membre assign().)
}
Fabien LE LEZ wrote:
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data)
{
char * d = new char[data.length()];
DWORD o;
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
throw Exception("Impossible d'envoyer la séquence au port COM" );
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Et s'il n'y en a pas, ça risque d'être encore plus amusant, non :-)?
(Pense à comment std::string cherche la longueur quand tu ne lui
donne pas explicitement.)
Je ne connais pas la fonction ReadFile, mais il doit bien être
possible d'en récouperer la longueur lue quelque part. Puis :
Pendant que j'y suis, je ne vois pas de o ni de data non plus.
L'idée d'utiliser un std::vector< char > me semble bonne, mais
std::vector< char > buf( taille ) ;
ssize_t lu = read( hPortCOM, &buf[ 0 ], buf.size() ) ;
if ( lu == -1 ) {
throw Exception( "Erreur de lecture" ) ;
}
return std::string( buf.begin(), buf.begin() + lu ) ;
. Convertir le read en ReadFile, et ça doit faire l'affaire sous
Windows aussi.)
throw Exception("Impossible d'envoyer la séquence au port COM");
// T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end());
}
Si tu veux vraiment garder la même convention d'appel (bancale AMHA,
m'enfin bon...) :
Je doute que ce soit le cas ici, mais ça m'est déjà arrivé de
passer un Container& plutôt que de renvoyer un Container pour
des motifs de performance. (Dans mon cas, le Container, c'était
un pré-STL équivalent à std::list. Avec en moyen 60.000
entrées.)
J'adore :-). On démande à l'objet qui n'existe pas sa taille
pour qu'on puisse lui dire d'avoir cette taille.
(Manifestement, il te manque du sommeil, ou du café, ou quelque
chose. Mais il faut avouer, le résultat ici pose une question
métaphysique assez intéressante.)
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
Et on continue. Ayant soigneusement construit le buf avec la
taille qu'il a dit qu'il a, on ne s'en sert plus, lui préférant
des symboles jamais vus avant. (Je suis en train de supposer que
hPortCOM est une variable globale, vue que Michael ne l'a pas
déclarée non plus. Et je suis sûr qu'avec un peu plus de
sommeil, tu lui aurais indiqué que ce n'est pas une bonne idée
non plus.)
throw Exception("Impossible d'envoyer la séquence au port COM");
// T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end());
Au moins on sait ce que la chaîne va contenir : que des char()
(c-à-d des ' ') :-). (Et je suppose que c'est le sommeil aussi
qui t'a fait utiliser l'opérateur d'affectation, plutôt que la
fonction membre assign().)
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data) { char * d = new char[data.length()];
DWORD o; if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM" );
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Et s'il n'y en a pas, ça risque d'être encore plus amusant, non :-)? (Pense à comment std::string cherche la longueur quand tu ne lui donne pas explicitement.)
Je ne connais pas la fonction ReadFile, mais il doit bien être possible d'en récouperer la longueur lue quelque part. Puis :
Pendant que j'y suis, je ne vois pas de o ni de data non plus. L'idée d'utiliser un std::vector< char > me semble bonne, mais
std::vector< char > buf( taille ) ; ssize_t lu = read( hPortCOM, &buf[ 0 ], buf.size() ) ; if ( lu == -1 ) { throw Exception( "Erreur de lecture" ) ; } return std::string( buf.begin(), buf.begin() + lu ) ;
. Convertir le read en ReadFile, et ça doit faire l'affaire sous Windows aussi.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end()); }
Si tu veux vraiment garder la même convention d'appel (bancale AMHA, m'enfin bon...) :
Je doute que ce soit le cas ici, mais ça m'est déjà arrivé de passer un Container& plutôt que de renvoyer un Container pour des motifs de performance. (Dans mon cas, le Container, c'était un pré-STL équivalent à std::list. Avec en moyen 60.000 entrées.)
J'adore :-). On démande à l'objet qui n'existe pas sa taille pour qu'on puisse lui dire d'avoir cette taille.
(Manifestement, il te manque du sommeil, ou du café, ou quelque chose. Mais il faut avouer, le résultat ici pose une question métaphysique assez intéressante.)
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
Et on continue. Ayant soigneusement construit le buf avec la taille qu'il a dit qu'il a, on ne s'en sert plus, lui préférant des symboles jamais vus avant. (Je suis en train de supposer que hPortCOM est une variable globale, vue que Michael ne l'a pas déclarée non plus. Et je suis sûr qu'avec un peu plus de sommeil, tu lui aurais indiqué que ce n'est pas une bonne idée non plus.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end());
Au moins on sait ce que la chaîne va contenir : que des char() (c-à-d des ' ') :-). (Et je suppose que c'est le sommeil aussi qui t'a fait utiliser l'opérateur d'affectation, plutôt que la fonction membre assign().)
}
James Kanze
Fabien LE LEZ wrote:
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data) { char * d = new char[data.length()];
DWORD o; if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM" );
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Et s'il n'y en a pas, ça risque d'être encore plus amusant, non :-)? (Pense à comment std::string cherche la longueur quand tu ne lui donne pas explicitement.)
Je ne connais pas la fonction ReadFile, mais il doit bien être possible d'en récouperer la longueur lue quelque part. Puis :
Pendant que j'y suis, je ne vois pas de o ni de data non plus. L'idée d'utiliser un std::vector< char > me semble bonne, mais
std::vector< char > buf( taille ) ; ssize_t lu = read( hPortCOM, &buf[ 0 ], buf.size() ) ; if ( lu == -1 ) { throw Exception( "Erreur de lecture" ) ; } return std::string( buf.begin(), buf.begin() + lu ) ;
. Convertir le read en ReadFile, et ça doit faire l'affaire sous Windows aussi.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end()); }
Si tu veux vraiment garder la même convention d'appel (bancale AMHA, m'enfin bon...) :
Je doute que ce soit le cas ici, mais ça m'est déjà arrivé de passer un Container& plutôt que de renvoyer un Container pour des motifs de performance. (Dans mon cas, le Container, c'était un pré-STL équivalent à std::list. Avec en moyen 60.000 entrées.)
J'adore :-). On démande à l'objet qui n'existe pas sa taille pour qu'on puisse lui dire d'avoir cette taille.
(Manifestement, il te manque du sommeil, ou du café, ou quelque chose. Mais il faut avouer, le résultat ici pose une question métaphysique assez intéressante.)
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
Et on continue. Ayant soigneusement construit le buf avec la taille qu'il a dit qu'il a, on ne s'en sert plus, lui préférant des symboles jamais vus avant. (Je suis en train de supposer que hPortCOM est une variable globale, vue que Michael ne l'a pas déclarée non plus. Et je suis sûr qu'avec un peu plus de sommeil, tu lui aurais indiqué que ce n'est pas une bonne idée non plus.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end());
Au moins on sait ce que la chaîne va contenir : que des char() (c-à-d des ' ') :-). (Et je suppose que c'est le sommeil aussi qui t'a fait utiliser l'opérateur d'affectation, plutôt que la fonction membre assign().)
}
Fabien LE LEZ wrote:
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data)
{
char * d = new char[data.length()];
DWORD o;
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
throw Exception("Impossible d'envoyer la séquence au port COM" );
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Et s'il n'y en a pas, ça risque d'être encore plus amusant, non :-)?
(Pense à comment std::string cherche la longueur quand tu ne lui
donne pas explicitement.)
Je ne connais pas la fonction ReadFile, mais il doit bien être
possible d'en récouperer la longueur lue quelque part. Puis :
Pendant que j'y suis, je ne vois pas de o ni de data non plus.
L'idée d'utiliser un std::vector< char > me semble bonne, mais
std::vector< char > buf( taille ) ;
ssize_t lu = read( hPortCOM, &buf[ 0 ], buf.size() ) ;
if ( lu == -1 ) {
throw Exception( "Erreur de lecture" ) ;
}
return std::string( buf.begin(), buf.begin() + lu ) ;
. Convertir le read en ReadFile, et ça doit faire l'affaire sous
Windows aussi.)
throw Exception("Impossible d'envoyer la séquence au port COM");
// T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end());
}
Si tu veux vraiment garder la même convention d'appel (bancale AMHA,
m'enfin bon...) :
Je doute que ce soit le cas ici, mais ça m'est déjà arrivé de
passer un Container& plutôt que de renvoyer un Container pour
des motifs de performance. (Dans mon cas, le Container, c'était
un pré-STL équivalent à std::list. Avec en moyen 60.000
entrées.)
J'adore :-). On démande à l'objet qui n'existe pas sa taille
pour qu'on puisse lui dire d'avoir cette taille.
(Manifestement, il te manque du sommeil, ou du café, ou quelque
chose. Mais il faut avouer, le résultat ici pose une question
métaphysique assez intéressante.)
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
Et on continue. Ayant soigneusement construit le buf avec la
taille qu'il a dit qu'il a, on ne s'en sert plus, lui préférant
des symboles jamais vus avant. (Je suis en train de supposer que
hPortCOM est une variable globale, vue que Michael ne l'a pas
déclarée non plus. Et je suis sûr qu'avec un peu plus de
sommeil, tu lui aurais indiqué que ce n'est pas une bonne idée
non plus.)
throw Exception("Impossible d'envoyer la séquence au port COM");
// T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end());
Au moins on sait ce que la chaîne va contenir : que des char()
(c-à-d des ' ') :-). (Et je suppose que c'est le sommeil aussi
qui t'a fait utiliser l'opérateur d'affectation, plutôt que la
fonction membre assign().)
On 03 Oct 2006 17:33:32 GMT, Michael <michael.at.gmail.dot.com>:
void COM_IO::GetData(std::string & data) { char * d = new char[data.length()];
DWORD o; if (!ReadFile(hPortCOM, d, data.length(), &o , 0)) throw Exception("Impossible d'envoyer la séquence au port COM" );
data = d;
Et s'il y a un ' ' qui traîne là-dedans, il coupera la chaîne.
Et s'il n'y en a pas, ça risque d'être encore plus amusant, non :-)? (Pense à comment std::string cherche la longueur quand tu ne lui donne pas explicitement.)
Je ne connais pas la fonction ReadFile, mais il doit bien être possible d'en récouperer la longueur lue quelque part. Puis :
Pendant que j'y suis, je ne vois pas de o ni de data non plus. L'idée d'utiliser un std::vector< char > me semble bonne, mais
std::vector< char > buf( taille ) ; ssize_t lu = read( hPortCOM, &buf[ 0 ], buf.size() ) ; if ( lu == -1 ) { throw Exception( "Erreur de lecture" ) ; } return std::string( buf.begin(), buf.begin() + lu ) ;
. Convertir le read en ReadFile, et ça doit faire l'affaire sous Windows aussi.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
return std::string (buf.begin(), buf.end()); }
Si tu veux vraiment garder la même convention d'appel (bancale AMHA, m'enfin bon...) :
Je doute que ce soit le cas ici, mais ça m'est déjà arrivé de passer un Container& plutôt que de renvoyer un Container pour des motifs de performance. (Dans mon cas, le Container, c'était un pré-STL équivalent à std::list. Avec en moyen 60.000 entrées.)
J'adore :-). On démande à l'objet qui n'existe pas sa taille pour qu'on puisse lui dire d'avoir cette taille.
(Manifestement, il te manque du sommeil, ou du café, ou quelque chose. Mais il faut avouer, le résultat ici pose une question métaphysique assez intéressante.)
if (!ReadFile(hPortCOM, d, data.length(), &o , 0))
Et on continue. Ayant soigneusement construit le buf avec la taille qu'il a dit qu'il a, on ne s'en sert plus, lui préférant des symboles jamais vus avant. (Je suis en train de supposer que hPortCOM est une variable globale, vue que Michael ne l'a pas déclarée non plus. Et je suis sûr qu'avec un peu plus de sommeil, tu lui aurais indiqué que ce n'est pas une bonne idée non plus.)
throw Exception("Impossible d'envoyer la séquence au port COM"); // T'es sûr que c'est le bon message ?
dest= std::string (buf.begin(), buf.end());
Au moins on sait ce que la chaîne va contenir : que des char() (c-à-d des ' ') :-). (Et je suppose que c'est le sommeil aussi qui t'a fait utiliser l'opérateur d'affectation, plutôt que la fonction membre assign().)
(Manifestement, il te manque du sommeil, ou du café, ou quelque chose.
Yep. Depuis hier matin, j'évite au maximum de faire quoi que ce soit d'important, car je ne fais que des conneries :-(
Fabien LE LEZ
On 3 Oct 2006 13:06:42 -0700, "James Kanze" :
(Manifestement, il te manque du sommeil,
C'est plutôt l'inverse : j'ai dormi dix-huit heures de rang, et depuis, je n'arrive pas à me réveiller.
ou du café, ou quelque chose.
J'en suis arrivé à voir double : je vois le même message deux fois (<news: et <news:).
On 3 Oct 2006 13:06:42 -0700, "James Kanze" <kanze.james@neuf.fr>:
(Manifestement, il te manque du sommeil,
C'est plutôt l'inverse : j'ai dormi dix-huit heures de rang, et
depuis, je n'arrive pas à me réveiller.
ou du café, ou quelque chose.
J'en suis arrivé à voir double : je vois le même message deux fois
(<news:1159906002.589567.216450@m7g2000cwm.googlegroups.com> et
<news:1159905658.909990.183150@i42g2000cwa.googlegroups.com>).