Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизСшная структура из 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c