Главная страница
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.047 c
14-1129623533
pazitron_brain
2005-10-18 12:18
2005.11.06
Что такое BBS?


4-1125410367
artdeveloper
2005-08-30 17:59
2005.11.06
Открыть системное диалоговое окно списка пользователей


11-1107361067
Bil Bal Dur
2005-02-02 19:17
2005.11.06
Warning при создании событий.


14-1129150278
Германн
2005-10-13 00:51
2005.11.06
Непонятный глюк на форуме


14-1129381101
alexsis
2005-10-15 16:58
2005.11.06
Уважаемые мастера, люди.