Главная страница
    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.037 c
1-1129094952
SANEK_10289
2005-10-12 09:29
2005.11.06
Помогите пожалуйста... Я из реестра беру имя пользователя...


1-1129189823
dest81
2005-10-13 11:50
2005.11.06
word, acrobat reader


3-1127475493
~viper~
2005-09-23 15:38
2005.11.06
Поиск


3-1127946719
turonix
2005-09-29 02:31
2005.11.06
Как через ADO узнать является ли текущее поле Primery Key


14-1129357806
12DFBDD
2005-10-15 10:30
2005.11.06
Regular expresion





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский