2014-02-05 7 views
0

Мы используем USB-последовательный преобразователь портов для установления соединения по последовательному порту. Мы протестировали его на компьютере без последовательного порта и смогли успешно инициализировать и отправить команду через конвертер на устройство. После того как мы выпустим файл .exe на другой компьютер с тем же USB-последовательным преобразователем, он не сможет открыть COM-порт.Невозможно открыть/инициализировать последовательный порт в C++ с помощью SerialCommHelper

Единственное, что мы думали, что нам нужно изменить в коде, это номер порта, который мы убедились в правильности работы с диспетчером устройств. COM6 на рабочем компьютере, а COM11 - на нерабочем компьютере. Мы также попытались изменить COM11 на COM2 (номер неиспользуемого порта). ПК, на котором мы пытаемся заставить его работать, уже имеет 3 реальных последовательных порта (COM1, 3 и 4), но будут ли они каким-то образом вмешиваться в этот порт?

Мы используем код SerialCommHelper.cpp для инициализации порта.

HRESULT CSerialCommHelper:: Init(std::string szPortName, DWORD dwBaudRate,BYTE byParity,BYTE byStopBits,BYTE byByteSize) 
{ 
HRESULT hr = S_OK; 
try 
{ 


    m_hDataRx = CreateEvent(0,0,0,0); 

    //open the COM Port 
    //LPCWSTR _portName =LPCWSTR(szPortName.c_str()); 

    wchar_t* wString=new wchar_t[4096]; 
    MultiByteToWideChar(CP_ACP, 0, szPortName.c_str(), -1, wString, 4096); 

    m_hCommPort = ::CreateFile(wString, 
           GENERIC_READ|GENERIC_WRITE,//access (read and write) 
           0, //(share) 0:cannot share the COM port      
           0, //security (None)    
           OPEN_EXISTING,// creation : open_existing 
           FILE_FLAG_OVERLAPPED,// we want overlapped operation 
           0// no templates file for COM port... 
           ); 
    if (m_hCommPort == INVALID_HANDLE_VALUE) 
    { 
     TRACE ("CSerialCommHelper : Failed to open COM Port Reason: %d",GetLastError()); 
     ASSERT (0); 
     std::cout << "This is where the error happens" << std::endl; 
     return E_FAIL; 
    } 

И мы называем это с помощью

if(m_serial.Init(comPort, 38400, 0, 1, 8) != S_OK) 

который ComPort установлен правильно, но Init никогда не возвращает S_OK.

Любая помощь приветствуется! Спасибо!

ответ