Changement de Port COM

Signaler
Messages postés
10
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
27 septembre 2005
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Dans mon programme, je veux changer de port COM (j'utilse mscomm32). Je suppose que plus tard j'aurai deux ports COm. Actuellement j'en ai qu'un.
Mon probleme :
Comment faire pour savoir si le port 2 existe?
Est ce que je traite avec les exceptions, et comment ? ou je peux faire autrement?

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
//***************************************************************************************
// OpenCommDevice : tente d'ouvrir un port afin de récupérer son handle.
// entrée : lpszName : nom du port à ouvrir.
// retour : handle du port s'il a pu être ouvert, NULL sinon.
//***************************************************************************************
HANDLE OpenCommDevice(LPCTSTR lpszName)
{
// tentative d'ouverture (si échec, on tente l'accès direct en insérant "[file://./ \\.\]" au début du nom)
HANDLE hComm = CreateFile(lpszName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL); if(hComm INVALID_HANDLE_VALUE && GetLastError() ERROR_FILE_NOT_FOUND)
{
UINT nLength = strlen(lpszName);
LPTSTR lpszAltName = new char[nLength+5];
strcpy(lpszAltName, nLength+5, _T("\\\\.\"));
strcpy(lpszAltName+4, nLength+1, lpszName);
hComm = CreateFile(lpszAltName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
delete[] lpszAltName;
}
return hComm;
}

//***************************************************************************************
// HasHardware : vérifie si un port est présent sur l'ordinateur.
// entrée : lpszName : nom du port à vérifier.
// retour : vrai si le port existe, faux sinon.
//***************************************************************************************
BOOL HasHardware(LPCTSTR lpszName)
{
// tentative d'ouverture
HANDLE hComm = OpenCommDevice(lpszName); if(hComm INVALID_HANDLE_VALUE && GetLastError() ERROR_FILE_NOT_FOUND)
return FALSE;
else
{
// on ferme le port si on a réussi à l'ouvrir
if(hComm != INVALID_HANDLE_VALUE)
CloseHandle(hComm);
return TRUE;
}
}
Messages postés
10
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
27 septembre 2005

Tu as mis quoi en librairie; STp
Merci de ta réponse
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Uniquement l'API windows :
#include <windows.h>
Messages postés
10
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
27 septembre 2005

'strcpy' : la fonction ne prend pas 3 arguments
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Désolé j'ai fait un copier collé d'une source dans laquelle j'utilisé une version "safe" de strcpy qui prend en plus la taille de la chaîne destination. Il suffir de virer la longueur en param 2.