ERROR_DEV_NOT_EXIST когда :: CreateFile в C ++ MFC? - PullRequest
0 голосов
/ 28 июля 2010

Я пишу, чтобы открыть порт, используя эту функцию:

HANDLE hFile = ::CreateFile(pszComName, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0,0);

// Check if we could open the device
if (hFile == INVALID_HANDLE_VALUE)
{
    DWORD hh=  ::GetLastError();

              error.Format(_T("test - [%d]"),hh); 

      AfxMessageBox(error,MB_ICONSTOP);
}

Я не могу открыть порт, и системный код ошибки, который я получаю, составляет 55: ERROR_DEV_NOT_EXIST 55 (0x37) из этого списка

что я могу сделать, чтобы открыть порт?спасибо

РЕДАКТИРОВАТЬ: Я перечислять порты, как это:

 for (UINT i=1; i<256; i++)
    {

      CString sPort;
      sPort.Format(_T("COM%d"), i);

      HANDLE hPort = ::CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, 0,OPEN_EXISTING,0, 0);
      if (hPort == INVALID_HANDLE_VALUE)
      {
        DWORD dwError = GetLastError();
      }
      else
      {
        AfxMessageBox(_T("1 open"));
        CloseHandle(hPort);
      }
    }

Я также проверил эти форматы:

sPort1.Format (_T ("URT% d"), я);

sPort3.Format (_T ("\. \ COM% d"), i);

sPort4.Format (_T ("\\. \ COM% d"),i);

и sPort5.Format (_T ("\ COM% d"), i);

, но я не смог их найти.

Ответы [ 2 ]

3 голосов
/ 28 июля 2010

Имена COM-портов в Windows CE / Mobile имеют формат COMX: - разница в двоеточии (например, COM1:).

Ваш код должен выглядеть следующим образом: CreateFile(L"COM1:",...)

Вы также можете проверить имя порта через реестр. Если у вас есть соединение ActiveSync, используйте редактор удаленного реестра и перейдите на [HKLM\Drivers\Active] - один из подразделов будет содержать информацию о нужном порту (при условии, что он загружается правильно).

3 голосов
/ 28 июля 2010

Очевидная вещь, которую нужно проверить, это правильное имя. Для COM-порта это обычно будет что-то вроде \\.\com1, но в C или C ++ вам нужно экранировать все обратные слэши, так что это будет выглядеть как "\\\\.\\com1", если вы используете строковый литерал.

...