Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Com-порт. DCB

51K
14 июля 2009 года
ccolg
2 / / 14.07.2009
Доброго времени суток.
Продскажите как можно в Delphi выставить значение RTS_CONTROL_TOGGLE. На С это делается dcb.fRtsControl = RTS_CONTROL_TOGGLE, но в delphi в структуре dcb нет параметра fRtsControl.
303
15 июля 2009 года
makbeth
1.0K / / 25.11.2004
Что за функция, что за структура dcb? Телепаты все в отпуске.
51K
15 июля 2009 года
ccolg
2 / / 14.07.2009
Цитата: makbeth
Что за функция, что за структура dcb? Телепаты все в отпуске.



Для настройки Com порта в C существует структура DCB c параметрами(скорость, четность, стоп-бит), для Delphi(Windows.pas) есть такая же:

Код:
type
  _DCB = packed record
    DCBlength: DWORD;
    BaudRate: DWORD;
    Flags: Longint;
    wReserved: Word;
    XonLim: Word;
    XoffLim: Word;
    ByteSize: Byte;
    Parity: Byte;
    StopBits: Byte;
    XonChar: CHAR;
    XoffChar: CHAR;
    ErrorChar: CHAR;
    EofChar: CHAR;
    EvtChar: CHAR;
    wReserved1: Word;
  end;
  {$EXTERNALSYM _DCB}
  TDCB = _DCB;
  DCB = _DCB;

Но набор параметров в не меньше. В частности нет параметра управления сигналом RTS(В С - fRtsControl).
Это мой первый опыт в Delphi(обстоятельства заставили), так что разбираюсь по ходу.
в Windows.pas до описания типа _DCB есть набор констант:
Код:
const
  { DTR Control Flow Values. }
  DTR_CONTROL_DISABLE = 0;
  {$EXTERNALSYM DTR_CONTROL_DISABLE}
  DTR_CONTROL_ENABLE = 1;
  {$EXTERNALSYM DTR_CONTROL_ENABLE}
  DTR_CONTROL_HANDSHAKE = 2;
  {$EXTERNALSYM DTR_CONTROL_HANDSHAKE}

  { RTS Control Flow Values}
  RTS_CONTROL_DISABLE = 0;
  {$EXTERNALSYM RTS_CONTROL_DISABLE}
  RTS_CONTROL_ENABLE = 1;
  {$EXTERNALSYM RTS_CONTROL_ENABLE}
  RTS_CONTROL_HANDSHAKE = 2;
  {$EXTERNALSYM RTS_CONTROL_HANDSHAKE}
  RTS_CONTROL_TOGGLE = 3;
  {$EXTERNALSYM RTS_CONTROL_TOGGLE}

если не трудно объясните, что за директива $EXTERNALSYM. Может это как-нибудь можно использовать.
303
15 июля 2009 года
makbeth
1.0K / / 25.11.2004
Дело в том, что все поля с префиксом f (в т.ч. и fRtsControl) объявлены как битовые, соответственно в Delphi они хранятся в упакованном виде в поле структуры Flags (11 и 12 биты). Записать в это поле значение можно примерно так:
 
Код:
_dcb.Flags := _dcb.Flags or ((RTS_CONTROL_HANDSHAKE) shl 11);
$EXTERNALSYM - это директива компилятора и здесь она никаким боком не поможет :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог