UHUH
excellent ca fonctionne avec le \\\\.\\ mille merci
vous m'otez un grosse épine du pied

merci beaucoup :)
sinon mon code , assez spec a mon applicatif est le suivant (désolé il est un peu fouillit mais j'ai un peu tester tout lol )
BOOL CMyComPort::Open(TABPORT *ptpPortConfig, DWORD dwMode, BOOL ModeOverlapped) {
TCHAR szPort[ 15 ];
BOOL fRetVal ;
HCURSOR hOldCursor, hWaitCursor ;
//HMENU hMenu ;
//HANDLE hCommWatchThread ;
//DWORD dwThreadID ;
COMMTIMEOUTS CommTimeOuts ;
BYTE bSet ;
DCB dcb ;
if ( ptpPortConfig->sNumber[0] == '\0' || ptpPortConfig->sNumber == NULL )
return ( FALSE ) ;
/*
if (fInUsed) {
return(FALSE);
}
*/
// Test si déjà utilisé dans l'appli
switch (IsInListUsed(ptpPortConfig->sNumber,dwMode)) {
case USEDOK:
// Mise a jour Port
Port=ptpPortConfig;
ListPortUsed.AddTail(*Port);
idComDev=tpComSystem[IntPort(ptpPortConfig->sNumber)].idComDev;
return (TRUE);
break;
case USEDNOK:
return (FALSE);
break;
case NOUSED:
break;
}
fModeOverlapped = ModeOverlapped;
// show the hourglass cursor
hWaitCursor = LoadCursor( NULL, IDC_WAIT ) ;
hOldCursor = SetCursor( hWaitCursor ) ;
// Si N°de port > MAXPORT => Erreur
if (atoi(ptpPortConfig->sNumber) > MAXPORTS) {
return (FALSE) ;
}
else
{
// load the COM prefix string and append port number
// LoadString( AfxGetInstanceHandle( ), IDS_COMPREFIX,
// szTemp, sizeof( szTemp ) ) ;
if (atoi(ptpPortConfig->sNumber)<10)
wsprintf( szPort, "COM%s", ptpPortConfig->sNumber ) ;
else
wsprintf( szPort, "\\\\.\\COM%s", ptpPortConfig->sNumber ) ;
}
// open COMM device
if (( idComDev =
CreateFile( szPort, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL |
(ModeOverlapped?FILE_FLAG_OVERLAPPED:0), // overlapped I/O
NULL )) == (HANDLE) -1 )
{
idComDev=NULL;
CString StrTemp;
StrTemp.Format( "Impossible d'ouvrir port de communication %s", szPort);
TraceErreur( StrTemp.GetBuffer(0));
return ( FALSE ) ;
}
else
{
// get any early notifications
//SetCommMask( idComDev, EV_RXCHAR ) ;
// setup device buffers
SetupComm( idComDev, 4096, 4096 ) ;
// purge any information in the buffer
// PurgeComm( idComDev, PURGE_TXABORT | PURGE_RXABORT |
// PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
// set up for overlapped I/O
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
CommTimeOuts.ReadTotalTimeoutConstant = 5 ;
CommTimeOuts.WriteTotalTimeoutMultiplier = 2;//NT 2;//0;
CommTimeOuts.WriteTotalTimeoutConstant = 10; //NT 10; //5 ;
SetCommTimeouts( idComDev, &CommTimeOuts ) ;
}
//fRetVal = SetupConnection( hWnd ) ;
dcb.DCBlength = sizeof( DCB ) ;
GetCommState( idComDev, &dcb ) ;
dcb.BaudRate = ptpPortConfig->dwBaud ;
dcb.ByteSize = ptpPortConfig->bData;
dcb.Parity = ptpPortConfig-> bParity ;
dcb.StopBits = ptpPortConfig->bStop ;
// setup hardware flow control
bSet = (BYTE) ((ptpPortConfig->dwHandShake & FC_DTRDSR) != 0) ;
dcb.fOutxDsrFlow = bSet ;
if (bSet)
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE ;
else
dcb.fDtrControl = DTR_CONTROL_ENABLE ;
bSet = (BYTE) ((ptpPortConfig->dwHandShake & FC_RTSCTS) != 0) ;
dcb.fOutxCtsFlow = bSet ;
if (bSet)
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE ;
else
dcb.fRtsControl = RTS_CONTROL_ENABLE ;
// setup software flow control
bSet = (BYTE) ((ptpPortConfig->dwHandShake & FC_XONXOFF) != 0) ;
dcb.fInX = dcb.fOutX = bSet ;
dcb.XonChar = ASCII_XON ;
dcb.XoffChar = ASCII_XOFF ;
dcb.XonLim = 100 ;
dcb.XoffLim = 100 ;
// other various settings
dcb.fBinary = TRUE ;
dcb.fParity = TRUE ;
fRetVal = SetCommState( idComDev, &dcb ) ;
if (fRetVal)
{
fInUsed = TRUE ;
// Mise à jour de la configuration
Port=ptpPortConfig;
Port->dwType=dwMode;
// Enregistrement dans la liste des ports utilisés
ListPortUsed.AddTail(*Port);
tpComSystem[IntPort(Port->sNumber)].idComDev=idComDev;
/*
// Create a secondary thread
// to watch for an event.
if (NULL == (hCommWatchThread =
CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
0,
(LPTHREAD_START_ROUTINE) CommWatchProc,
(LPVOID) npTTYInfo,
0, &dwThreadID )))
{
CONNECTED( npTTYInfo ) = FALSE ;
CloseHandle( COMDEV( npTTYInfo ) ) ;
fRetVal = FALSE ;
}
else
{
THREADID( npTTYInfo ) = dwThreadID ;
HTHREAD( npTTYInfo ) = hCommWatchThread ;
// assert DTR
EscapeCommFunction( COMDEV( npTTYInfo ), SETDTR ) ;
SetTTYFocus( hWnd ) ;
hMenu = GetMenu( hWnd ) ;
EnableMenuItem( hMenu, IDM_DISCONNECT,
MF_ENABLED | MF_BYCOMMAND ) ;
EnableMenuItem( hMenu, IDM_CONNECT,
MF_GRAYED | MF_DISABLED | MF_BYCOMMAND ) ;
}
*/
}
else
{
fInUsed = FALSE ;
CloseHandle( idComDev ) ;
}
// restore cursor
SetCursor( hOldCursor ) ;
return ( fRetVal ) ;
} // Fin Open 2