cs_billybob13
Messages postés10Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention27 septembre 2005
-
30 mai 2005 à 11:39
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
31 mai 2005 à 09:01
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?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 30 mai 2005 à 14:44
//***************************************************************************************
// 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;
}
}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 31 mai 2005 à 09:01
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.