Показать сообщение отдельно
Старый 17.06.2004, 12:25   #16  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Александр! Так о том и речь, что невозможно открыть СОМ-порт, используя
OVERLAPPED!!

т.е, что бы предыдущий пример заработал, надо, кроме того, что бы поместить его в отдельный поток, еще и открыть порт примерно таким образом:
PHP код:
BOOL CAddIn::InitComm(int nCommPortint nCommSpeed)
{
    
DCB dcb;
    
CString szCommPort;
    
    switch(
nCommPort)
    {
        case 
0:        szCommPort.Format(_T("COM1"));break;
        case 
1:        szCommPort.Format(_T("COM2"));break;
        case 
2:        szCommPort.Format(_T("COM3"));break;
        case 
3:        szCommPort.Format(_T("COM4"));break;
        case 
4:        szCommPort.Format(_T("COM5"));break;
        case 
5:        szCommPort.Format(_T("COM6"));break;
        case 
6:        szCommPort.Format(_T("COM7"));break;
        case 
7:        szCommPort.Format(_T("COM8"));break;
        default:    
szCommPort.Format(_T("COM1"));break;
    }


    
m_hComm CreateFile(szCommPortGENERIC_READ GENERIC_WRITE,
                 
0NULLOPEN_EXISTINGFILE_FLAG_OVERLAPPEDNULL);
    if (::
m_hComm == INVALID_HANDLE_VALUE
    {
        
AfxMessageBox(_T("?хтючьюцэю юЄъЁ?Є№ COM яюЁЄ"));
        return 
FALSE;
    }

    if(
ov.hEvent == INVALID_HANDLE_VALUEov.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
      
    
GetCommState(::m_hComm,&dcb);
    
SetupComm (::m_hComm256256);       // allocate transmit & receive buffer
    
switch(nCommSpeed)
    {
        case 
0:        dcb.BaudRate CBR_115200;break;
        case 
1:        dcb.BaudRate CBR_57600;break;
        case 
2:        dcb.BaudRate CBR_38400;break;
        case 
3:        dcb.BaudRate CBR_19200;break;
        case 
4:        dcb.BaudRate CBR_9600;break;
        case 
5:        dcb.BaudRate CBR_4800;break;
        case 
6:        dcb.BaudRate CBR_2400;break;
        default:    
dcb.BaudRate CBR_9600;break;
    }
    
dcb.ByteSize 8;
    
dcb.Parity NOPARITY;
    
dcb.StopBits ONESTOPBIT;
    
dcb.fRtsControl RTS_CONTROL_ENABLE;
    
SetCommState (::m_hComm, &dcb);
    
SetCommMask(::m_hCommEV_BREAK EV_RXCHAR);

return 
TRUE;

И как Вы собираетесь выставить параметры СОМ порта?
Я, в принципе, знаю, что куда надо записать.... UART он во всем мире одинаков
т.е. как в регистрах UART выставить соответствующие значения? 0011001 (то, что, в принципе и делает SetCommState)