Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.063 c
3-1127490087
bbn
2005-09-23 19:41
2005.11.06
Tools to MS SQL


2-1129133467
Gero
2005-10-12 20:11
2005.11.06
Тест


9-1119506891
vintik
2005-06-23 10:08
2005.11.06
OpenGl буфер трафарета


1-1129091826
dreamse
2005-10-12 08:37
2005.11.06
Функция замены слов в тексе


2-1129022447
AndDem
2005-10-11 13:20
2005.11.06
Поиск сервера в локальной сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский