Не работает запись в СОМ порт
От: Аноним  
Дата: 22.09.08 11:51
Оценка:
Пытаюсь работать с картридером через СОМ порт. WINXP,studio2003. Апаратно все работает поскольку тестовые программы работают. Однако програмно не могу доступиться.
void __cdecl _tmain(int argc, TCHAR *argv[])

{
#define COMPORT "COM1"
    //LPSTR lpszDst;
    HANDLE hCom;
    wchar_t *ret;
    char *ret1;
    char buf[255];
    DCB dcb;
    BOOL fSuccess;

    
    ret=_wsetlocale(LC_ALL, L".1251");
hCom=CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

if (hCom == INVALID_HANDLE_VALUE) 
    { 
        
        sprintf(buf,"Не можу відкрити %s порт(error %d)\n",COMPORT, GetLastError());
        putso(buf);
        _gettch();
        return;
    }

fSuccess = GetCommState(hCom, &dcb);

   if (!fSuccess) 
   {
      // Handle the error.
      printf ("GetCommState failed with error %d.\n", GetLastError());
      CloseHandle(hCom);
      return ;
   }

 dcb.BaudRate = CBR_9600;     // set the baud rate
 dcb.ByteSize = 7;             // data size, xmit, and rcv
 dcb.Parity = 1;        // no parity bit
 dcb.StopBits = ONESTOPBIT;    // one stop bit

fSuccess =SetCommState(hCom, &dcb);
 if (!fSuccess) 
   {
      // Handle the error.
      printf ("SetCommState failed with error %d)\n", GetLastError());
      CloseHandle(hCom);
      return ;
   }

   fSuccess= WriteFile(hCom, "123456789",9,&kilb,NULL);
if (!fSuccess) 
   {
      // Handle the error.
      sprintf (buf,"Помилка при запису в порт(error %d.\n", GetLastError());
      putso(buf);
      CloseHandle(hCom);
      _gettch();
      return ;
   }

     CloseHandle(hCom);

    _gettch();
    
    return ;
}

Команда WriteFile(hCom, "123456789",9,&kilb,NULL);
не проходит,выдает ошибку с номером 87 ,в чем дело ?

Добавлено форматирование — Кодт


22.09.08 18:53: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Не работает запись в СОМ порт
От: VVV Россия  
Дата: 22.09.08 12:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>hCom=CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);


А> fSuccess= WriteFile(hCom, "123456789",9,&kilb,NULL);


А>Команда WriteFile(hCom, "123456789",9,&kilb,NULL);

А>не проходит,выдает ошибку с номером 87 ,в чем дело ?

Ты открываешь порт с флагом FILE_FLAG_OVERLAPPED, а в функции WriteFile не передаёшь указатель на инициализированную OVERLAPPED структуру.

Посмотри пример от Микрософт:
http://msdn.microsoft.com/en-us/library/ms810467.aspx
Re: Не работает запись в СОМ порт
От: _nikita_ Чехия http://www.regarena.ru
Дата: 22.09.08 12:50
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Пытаюсь работать с картридером через СОМ порт. WINXP,studio2003. Апаратно все работает поскольку тестовые программы работают. Однако програмно не могу доступиться.

А>Команда WriteFile(hCom, "123456789",9,&kilb,NULL);
А>не проходит,выдает ошибку с номером 87 ,в чем дело ?

Выбирай на "вкус": Serial Communications
Учение свет, а неучение — чуть свет и на работу.
сом порт serial
Re[2]: Не работает запись в СОМ порт
От: doktor35  
Дата: 22.09.08 12:53
Оценка:
Здравствуйте, VVV, Вы писали:

VVV>Здравствуйте, Аноним, Вы писали:


А>>hCom=CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);


А>> fSuccess= WriteFile(hCom, "123456789",9,&kilb,NULL);


А>>Команда WriteFile(hCom, "123456789",9,&kilb,NULL);

А>>не проходит,выдает ошибку с номером 87 ,в чем дело ?

VVV>Ты открываешь порт с флагом FILE_FLAG_OVERLAPPED, а в функции WriteFile не передаёшь указатель на инициализированную OVERLAPPED структуру.


VVV>Посмотри пример от Микрософт:

VVV>http://msdn.microsoft.com/en-us/library/ms810467.aspx


Спасибо, все заработало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.