Статьи Королевства Дельфи


Часть V - часть 2


dwSize Задает размер структуры COMMCONFIG в байтах wVersion Задает номер версии структуры COMMCONFIG. Должен быть равным 1. wReserved Зарезервировано и не используется dcb Блок управления устройством (DCB) для порта RS-232. dwProviderSubType Задает тип устройства и формат устройство-зависимого блока информации. Фактически это тип порта. Конкретные значения данного поля приведены в описании структуры COMMPROP выше. dwProviderOffset Смещение, в байтах, до устройство-зависимого блока информации от начала структуры. dwProviderSize Размер, в байтах, устройство-зависимого блока информации. wcProviderData Устройство-зависимый блок информации. Это поле может быть любого размера или вообще отсутствовать. Поскольку структура COMMCONFIG может быть в дальшейшем расширена, для определения положения данного поля следует использовать dwProviderOffset. Если dwProviderSubType PST_RS232 или PST_PARALLELPORT, то данное поле отсутствует. Если dwProviderSubType PST_MODEM, то данное поле содержит структуру MODEMSETTINGS.

Не смотря на то, что нам нужен только DCB, приходится иметь дело со всеми полями. Заполнение данной структуры противоречивыми данными может привести к неправильной настройке порта, поэтому следует пользоваться функцией GetCommConfig: BOOL GetCommConfig( HANDLE hCommDev, LPCOMMCONFIG lpCC, LPDWORD lpdwSize ); Параметры функции следующие: hCommDev Описатель открытого коммуникационного порта. lpCC Адрес выделеного и заполненого нулями, кроме поля dwSize, блока памяти под структуру COMMCONFIG. В поле dwSize нужно занести размер структуры COMMCONFIG. После вызова функции все поля структуры будут содержать информацию о текущих параметрах порта. lpdwSize Адрес двойного слова, которое после воврата из функции будет содержать число фактически переданных в структуру байт. В случае успешного завершения функция возвращает ненулевое значение.

Как всегда не обошлось без тонкостей. Структура COMMPROP имеет перемнную длину, поэтому затруднительно сразу выделить требуемый блок памяти. Как и в случае с функцией GetCommProperties, функцию GetCommConfig придется вызывать дважды:




Начало  Назад  Вперед



Книжный магазин