Erreur avec SetCommState, please help me

Erreur avec SetCommState, please help me - C++ - Programmation

Marsh Posté le 07-02-2003 à 22:32:33    

Salut a tous !
voila j'ai un probleme pour ouvrir une liaison avec le port COM2 je vous mets le code pour voir si vous pouvez m'aider a trouver mon erreur. Je n'est pas de probleme de compilation, 0 warning 0 error par contre lors de l'execution l'erreur sur le PC du bahut est a la ligne SetCommState, j'obtiens l'erreur 6 avec GetLastError() ( The handle is invalid. ERROR_INVALID_HANDLE ) par contre avec mon PC j'obtiens l'erreur 87.
Si vous pouvez m'aider ca serait gentil de votre part. Je vous remerci par avance de toutes vos aide.
 
 

Citation :


CPortSerie::CPortSerie(CString _PortCOM)        
{
 PortCOM = _PortCOM;
 int ErreurGetCommState=-1;
 int ErreurSetCommState=-1;
 IdCom = CreateFile(PortCOM,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
 if (IdCom == INVALID_HANDLE_VALUE)
 {
  cout << "Erreur Invalid_Handle_Value : " << INVALID_HANDLE_VALUE << "\n";
 }
 
   ErreurGetCommState = GetCommState(IdCom,&MonDcb);
 if (ErreurGetCommState == 0)
 {
  cout << "Erreur de lors de l'exectution de la fonction GetCommState :" <<  
  ErreurGetCommState << "\n";
 }
 
 MonDcb.BaudRate=CBR_9600;
 MonDcb.Parity=0;
 MonDcb.ByteSize=8;
 MonDcb.StopBits=1;  
 
 ErreurSetCommState = SetCommState(IdCom,&MonDcb);  
  if (ErreurSetCommState == 0)
 {
  cout << "Erreur de lors de l'exectution de la fonction SetCommState :" << GetLastError() << "\n";
 }
 
// Erreur=-1;
}//fin constructeur par defaut

 
 
 

Citation :


 protected:
 HANDLE IdCom;
 DCB MonDcb;
 CString PortCOM;

Reply

Marsh Posté le 07-02-2003 à 22:32:33   

Reply

Marsh Posté le 07-02-2003 à 23:29:59    

Je n'ai pas trop lu ton code, mais tu peux te servir de cette page qui donne un exemple similaire.
 
Déjà, n'ouvre pas ton port COM avec "FILE_SHARE_READ|FILE_SHARE_WRITE".


---------------
each day I don't die is cheating
Reply

Marsh Posté le 07-02-2003 à 23:47:40    

J'avais eu ce genre d'erreur il y a assez longtemps, ça venait d'une combinaison de databits/parity/stopbits non supportée, d'ou l'erreur 87 (paramètre invalide). J'en avait bavé pour résoudre ce sac de noeuds, il a fallu que je tatonne...
 
Essaie l'exemple suivant tiré du MSDN pour voir déja si ta structure DCB est correcte. Si tu n'as plus l'erreur 87, alors ça vient de la. A toi ensuite de tatonner pour trouver une combinaison valable [:sinclaire]

Code :
  1. /* A sample program to illustrate setting up a serial port. */
  2. #include <windows.h>
  3. int main(int argc, char *argv[])
  4. {
  5.    DCB dcb;
  6.    HANDLE hCom;
  7.    BOOL fSuccess;
  8.    char *pcCommPort = "COM2";
  9.    hCom = CreateFile( pcCommPort,
  10.                     GENERIC_READ | GENERIC_WRITE,
  11.                     0,    // must be opened with exclusive-access
  12.                     NULL, // no security attributes
  13.                     OPEN_EXISTING, // must use OPEN_EXISTING
  14.                     0,    // not overlapped I/O
  15.                     NULL  // hTemplate must be NULL for comm devices
  16.                     );
  17.    if (hCom == INVALID_HANDLE_VALUE)
  18.    {
  19.        // Handle the error.
  20.        printf ("CreateFile failed with error %d.\n", GetLastError());
  21.        return (1);
  22.    }
  23.    // Build on the current configuration, and skip setting the size
  24.    // of the input and output buffers with SetupComm.
  25.    fSuccess = GetCommState(hCom, &dcb);
  26.    if (!fSuccess)
  27.    {
  28.       // Handle the error.
  29.       printf ("GetCommState failed with error %d.\n", GetLastError());
  30.       return (2);
  31.    }
  32.    // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
  33.    dcb.BaudRate = CBR_57600;     // set the baud rate
  34.    dcb.ByteSize = 8;             // data size, xmit, and rcv
  35.    dcb.Parity = NOPARITY;        // no parity bit
  36.    dcb.StopBits = ONESTOPBIT;    // one stop bit
  37.    fSuccess = SetCommState(hCom, &dcb);
  38.    if (!fSuccess)
  39.    {
  40.       // Handle the error.
  41.       printf ("SetCommState failed with error %d.\n", GetLastError());
  42.       return (3);
  43.    }
  44.    printf ("Serial port %s successfully reconfigured.\n", pcCommPort);
  45.    return (0);
  46. }


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed