Svp un coup de pouce pour le port serie

Signaler
Messages postés
21
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
29 juillet 2004
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
salut les pots actuellement je travail sur un projet en visuel c++ sur la communication en port serie DB9, j'arrive à faire passer une chaine de caractaire mais mon blm c que j'y parvien seulement si je fait l'allocation tableau de type char.
je voudrais eviter cette allocation car je suis limité par le nombre de case allouées dans ce tableau .
de ma part je vous invites à voir une partie de mon source, la partie qui s'occupe de la transmition et de la reception:

------------transmition d'une chaine-----------------------

bool comserie::ecrireport(char* trame)
{

char p[129];

strcpy(p,trame);

DWORD dwNumBytesWritten;



if(!WriteFile(Com, p, 170, &dwNumBytesWritten, NULL))

return 0;
else
return 1;


}

-----------reception de la chaine----------------------

char* comserie::lectport()
{

char *e;
e = new char[129];


SetCommMask (Com,EV_RXCHAR );

// attend un evenement

WaitCommEvent (Com,&dwCommStatus,0);

ReadFile (Com,e,170,&dwBytesTransferred,0);

return e;
}

------------------------------------------------------------

j'ai associer 2 bouttons qui declanchent la lecture et l'ecriture
voici le code:

-----------------------reception-----------------------

void CPrmfcView::OnRead()
{
// TODO: Add your control notification handler code here


m_affich = k.lectport(); //m_affiche variable associée au boutton de lecture

UpdateData(false);

}

-------------------envoie--------------------------------

void CPrmfcView::OnWrite()
{
// TODO: Add your control notification handler code here
bool s;
UpdateData(true);

char p[170];//♥ c ca le problem je veu pas d'allocation ♥


sprintf(p,"%s",m_saisie);


s = k.ecrireport(p);
if (!s)
{
m_test3 = "error";
UpdateData(false);
}
else
{
m_test3 = "ok";
UpdateData(false);
}



}

si quelqun a déja travailler sur les port serie qu'in se manifeste
merci d'avance

glaive l'epée de la justice et du jeu video

6 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
char p[170]; dans une fonction n'est pas une allocation !!!
c'est juste pris sur la pile par un retrait de ESP, le memory manager n'est pas du tout appele.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
29 juillet 2004

y a pas moyen d'eviter ca je veux envoyer des chaine sans me soucier de la taille quelque chose comme la recuperation de la taille, en travaillant avec les CString.

j'ai denicher une fonction qui retourne le nombre d'octect envoyées par l'emetteur:

ClearCommError(Com,&Errors,&Stat); // c la fonction
nCarALire=Stat.cbInQue;// nCarALire une variable qui recupere la taille de la chaine reçue

glaive l'epée de la justice et du jeu video
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Tu ne veux pas d'allocation et tu parles de CString. Un CString passe son temps a faire de l'alloc desalloc, faudrait savoir.
MFC pas pour moi.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
29 juillet 2004

je vais essayer ta proposition et j'insiste si quelq'un a deja travailler sur le port serie DB9 qu'il m'envoi un message merci les pots

glaive l'epée de la justice et du jeu video
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

y a pas moyen d'eviter ca je veux envoyer des chaine sans me soucier de la taille--> si j'ai biencompris tu veut pas te soucier a la taille de P[170]; alors si c ca re mplace la avec p [];
Life is Short 8-)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
pour envoyer une chaine de caractères (terminées par un caractère nul bien sur) :

void emmettre(const char* trame)
{
DWORD dwNbBytesWritten;
WriteFile(hComm, (void*)trame, strlen(trame), &dwNbBytesWritten, NULL);
}