Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Сшная структура из MSDN - как понимать такие поля ?   Найти похожие ветки 

 
GuAV ©   (2005-09-03 22:13) [0]

typedef struct _DCB {
 ...
 DWORD fBinary: 1;
 DWORD fParity: 1;
 DWORD fOutxCtsFlow:1;
 DWORD fOutxDsrFlow:1;
 DWORD fDtrControl:2;
 DWORD fDsrSensitivity:1;
 DWORD fTXContinueOnXoff:1;
 DWORD fOutX: 1;
 DWORD fInX: 1;
 DWORD fErrorChar: 1;
 DWORD fNull: 1;
 DWORD fRtsControl:2;
 DWORD fAbortOnError:1;
 DWORD fDummy2:17;
 ...

В windows pas их вообще нет.
Это просто объявление несуществующего поля, и значения, которое оно якобы принимает, или же дело здесь сложнее ?


 
Турист   (2005-09-03 22:30) [1]

Описание битов поля TDCB.Flags


 
Anatoly Podgoretsky ©   (2005-09-03 22:45) [2]

Это битовые поля, аналога в Паскаль нет.


 
GuAV ©   (2005-09-03 23:25) [3]


> Турист  


> Anatoly Podgoretsky ©


Спасибо.

DWORD что значит ? Тип к которому приводятся биты ? Или ещё и sizeof(DWORD) как-то учитывается ?
Биты в порядке от младшего к старшему ?

И зачем такое сделали, ввели несовместимость с другими языками ? В данном конкретном случае ведь можно было бы завести один DWORD, и константы для него, которые or-ятся. В windows.pas, получается, значения этих TDCB.Flags никак не отображены..


 
GuAV ©   (2005-09-03 23:49) [4]

Вроде так...

type
 TExpandedDCBFlags = record
   fBinary,
   fParity,
   fOutxCtsFlow,
   fOutxDsrFlow,
   fDtrControl,
   fDsrSensitivity,
   fTXContinueOnXoff,
   fOutX,
   fInX,
   fErrorChar,
   fNull,
   fRtsControl,
   fAbortOnError: DWORD
 end;

function ExpandDcbFlags(Flags: DWORD): TExpandedDCBFlags;
begin
 with Result do
 begin
   fBinary := Flags and 1 shl 0;
   fParity := Flags and 1 shl 1;
   fOutxCtsFlow := Flags and 1 shl 2;
   fOutxDsrFlow := Flags and 1 shl 3;
   fDtrControl := Flags and $3 shl 4;
   fDsrSensitivity := Flags and 1 shl 6;
   fTXContinueOnXoff := Flags and 1 shl 7;
   fOutX := Flags and 1 shl 8;
   fInX := Flags and 1 shl 9;
   fErrorChar := Flags and 1 shl 10;
   fNull := Flags and 1 shl 11;
   fRtsControl := Flags and $3 shl 12;
   fAbortOnError := Flags and 1 shl 14;
 end;
end;

function PackDcbFlags(Flags: TExpandedDCBFlags): DWORD;
begin
 with Flags do
 begin
   Result :=
     fBinary shr 0 or
     fParity shr 1 or
     fOutxCtsFlow shr 2 or
     fOutxDsrFlow shr 3 or
     fDtrControl shr 4 or
     fDsrSensitivity shr 6 or
     fTXContinueOnXoff shr 7 or
     fOutX shr 8 or
     fInX shr 9 or
     fErrorChar shr 10 or
     fNull shr 11 or
     fRtsControl shr 12 or
     fAbortOnError shr 14;
 end;
end;


 
Anatoly Podgoretsky ©   (2005-09-04 00:20) [5]

GuAV ©   (03.09.05 23:25) [3]
DWORD = WORD*2 = BYTE/4 = 32 BITS


 
GuAV ©   (2005-09-04 00:26) [6]

Что в DWORD 32 бита я знаю.

Вопрос из [3]

> DWORD что значит ?

следовало бы сфорулировать так:

Если в структуре из [0] заменить DWORD на WORD или BYTE, поменялось бы что нибудь или нет ?


 
Джо ©   (2005-09-04 01:22) [7]

http://www.cs.cf.ac.uk/Dave/C/node13.html


 
GuAV ©   (2005-09-04 01:31) [8]

Джо ©   (04.09.05 1:22) [7]

Спасибо.

"Some bit field members are stored left to right others are stored right to left in memory."

Весело.


 
Anatoly Podgoretsky ©   (2005-09-04 08:54) [9]

GuAV ©   (04.09.05 00:26) [6]
Ничего, данная языковая конструкция не имеет ничего общего с количеством байт

GuAV ©   (04.09.05 01:31) [8]
В книгу приколов. Особенно интересно право/лево в памяти.



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
14-1129398841
Praetor
2005-10-15 21:54
2005.11.06
Человек чмо? или нет?


4-1125735904
dak565656
2005-09-03 12:25
2005.11.06
Программирование PCI


2-1129104924
Gomez
2005-10-12 12:15
2005.11.06
Соотношение микронов и пикселей


2-1129023909
romas
2005-10-11 13:45
2005.11.06
Providor для FoxPro в ADOConnection


6-1121775131
SlyFox
2005-07-19 16:12
2005.11.06
Простенький SMTP-сервер