Итак, функции для работы с портом используют указатель на порт. То есть Вы создаете этот указатель, и если он создан (не 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; }
Имейте в виду, что Вы не можете открыть порт, если с ним работают, например, мышиный. Но если у Вас получилось, то другая программа не сможет обратиться к порту. Кроме того порта может не быть или другая программа просто не освободила указатель или повесила его. Итак, какие могут быть ошибки:
Занят. Отсутствует. Выведен из строя.