С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Подключить устройство через COM-порт и отправить на него данные - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа для печати всех файлов из указанной папки http://www.cyberforum.ru/cpp/thread110488.html
Добрый день! Весь интеренет облазил не могу найти прогу которая будет печатать файл попадающий в указанную папку и после печати удалять его( Я сам не программист, и поэтому прошу Вас если можете...
C++ Хороший или плохой тон программирования вот в книгах читаю что гото туфта полная..на форуме тоже так говорят,а почему?очень нужная вещь,иногда лучше использовать это чем циклы http://www.cyberforum.ru/cpp/thread109667.html
книга Windows 2000 API Р.Саймон где скачать диск с программами? C++
книга Windows 2000 API Р.Саймон где скачать диск с программами который идет к книге?
Календарь C++
Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, ... , 6 — суббота, 7 — воскресенье. Дано целое число K, лежащее в диапазоне 1–365, и целое число N, лежащее в диапазоне 1–7....
C++ Как сделать сохранение? http://www.cyberforum.ru/cpp/thread109203.html
как сделать сохранение всех сточек в текстовый файл для этой программы? подскажыте...
C++ Текст плеера дайте текст плеера! подробнее

Показать сообщение отдельно
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
01.04.2010, 10:36
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <string>
#include <conio.h>
 
// 1. здесь нужно #include <windows.h>, а не winbase.h
#include <winbase.h>
 
void open_port();
void close_port();
DWORD __stdcall ReadThread(LPVOID hwnd);
 
// 2. нафига тут public??? ошибка 
public:
      HANDLE hCom;
 
int main()
{
      // 3. ошибка: нужно использовать std::, либо using namespace std
      cout << "<=SERIAL PORT=>\n\n";
      //HANDLE hCom;
 
      // сперва открываем порт
      open_port();
 
      // 4. ошибка: с вероятностью 99% поток не успеет начать работу, ничего не произойдет. А мы его сразу же закрываем.
      // в конце работы закрываем порт
      close_port();
 
      getch();
      return 0;
}
 
void open_port()
{
      // по логике должно быть const char
      char sPortName[] = "COM1";   // 5. ошибка, должно быть: "\\.\\\\COM1", иначе может не работать на NT
      
      hCom = CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
 
      if (hCom == INVALID_HANDLE_VALUE)
      {
            cout << "Error opening port!\n";
            getch();
            return;
      }
      else
      {
            cout << "Port succesfully opened!\n";
 
            DCB dcb;
            GetCommState(hCom, &dcb);
 
            dcb.BaudRate = CBR_57600;
            dcb.ByteSize = 8;
            dcb.Parity = NOPARITY;
            dcb.StopBits = ONESTOPBIT;
 
            if (SetCommState(hCom, &dcb))
                  cout << "Configuring OK.\n";
            else
                  cout << "Configuring error.\n";
 
            // 6. ошибка: нигде не объявлен hThread                  
            hTread = CreateThread(0, 0, ReadThread, (LPVOID)this, 0, 0);   // 7. опечатка: hThread должно быть; 8. ошибка: this в этом контексте не существует.
      }
}
   
void close_port()
{
      if (hCom == INVALID_HANDLE_VALUE)
            return;
 
      TerminateThread(hThread, 0);   // 9. грубая ошибка: так делать нельзя. Необходимо дать потоку сигнал к завершению и позволить ему завершиться самому.
      CloseHandle(hCom);
      // 10. грубая ошибка: не закрыт хэндл потока hThread - утечка ресурсов
 
      hCom = INVALID_HADLE_VALUE;   // 11. опечатка: должно быть INVALID_HANDLE_VALUE
}
 
DWORD __stdcall ReadThread(LPVOID hwnd)
{
      DWORD iSize;
      char sReceivedChar;
 
      while (true)
      {
            ReadFile(hCom, &sReceivedChar, 1, &iSize, 0);
            // 12. ошибка: IDC_EDIT2 не определен, 13. ошибка: HWND и this - разные вещи, их нельзя смешивать
            SendDlgItemMessage((HWND)hwnd, IDC_EDIT2, WM_CHAR, sReceivedChar, 0);
      }
}
 
// PS: судя по всему, этот код выдернут с корнем из какого-то оконного диалогового приложения, где есть и this, и HWND, и IDC_EDIT2... и просто вставлен в консольное приложение.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.