Шаг 97 - CreateFile и HANDLE порта.
Итак, функции для работы с портом используют указатель на порт. То есть Вы создаете этот указатель, и если он создан (не NULL), то используя его можно управлять устройством. Как раз CreateFile() и умеет создавать указатель для порта.
Посмотрите на рисунок. Мы используем CreateFile() для получения HANDLE, с помощью которого потом и производим операции ввода-вывода на устройство. После работы его нужно закрыть CloseHandle(). Сама эта функция CreateFile() такая:
HANDLE CreateFile
(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
В нашем случае lpFileName - это имя порта:
LPT1 , LPT2 и так далее
COM1, COM2, и так далее.
Переменная dwDesiredAccess - это атрибут доступа файлу. Он может принимать такие значения:
0 получить атрибут
GENERIC_READ чтение
GENERIC_WRITE запись
GENERIC_READ|GENERIC_WRITE чтение и запись
DwShareMode - совместный доступ, для данного случая доступа к портам всегда равен 0.
LpSecurityAttributes - атрибут защиты. Нужен для NT, в нашем случае всегда равен OPEN_EXISTING.
DwFlagsAndAttributes - атрибут создаваемого файла, в нашем случае должен быть 0.
HTemplateFile - файл шаблона, для нас всегда NULL.
Итак, для работы с портами нужно уставить только lpFileName, dwDesiredAccess, LpSecurityAttributes. При нормальном выполнении мы получим HANDLE, в противном случае NULL.
// TestComm.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
void main()
{
HANDLE Com2Port;
Com2Port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);
if(Com2Port!=INVALID_HANDLE_VALUE)
{
cout << "Open COM 2 " << endl;
CloseHandle(Com2Port);
} else
cout << "Error Open COM2" << endl;
}
Имейте в виду, что Вы не можете открыть порт, если с ним работают, например, мышиный. Но если у Вас получилось, то другая программа не сможет обратиться к порту. Кроме того порта может не быть или другая программа просто не освободила указатель или повесила его. Итак, какие могут быть ошибки:
Занят.
Отсутствует.
Выведен из строя.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|