|
Delphi (С++) Наличие флага в комбинации. | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
21.10.14
✎
15:41
|
Дня доброго.
Для winapi, в функциях используется параметры типа DWORD, который является комбинацией байтовых флагов, например: http://msdn.microsoft.com/en-us/library/dd162845(v=vs.85).aspx Attributes The printer attributes. This member can be any reasonable combination of the following values. PRINTER_ATTRIBUTE_DIRECT PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST, и.т.д. Как собрать комбинацию - понятно. value:= PRINTER_ATTRIBUTE_DIRECT or PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST; А вот как проверить наличие флага PRINTER_ATTRIBUTE_DIRECT в существующей комбинации? От противного? FlagEnabled:=(value and PRINTER_ATTRIBUTE_DIRECT)<>0; |
|||
1
DmitrO
21.10.14
✎
15:43
|
if (value && PRINTER_ATTRIBUTE_DIRECT)
{ }; |
|||
2
H A D G E H O G s
21.10.14
✎
15:43
|
Ахтунг!
Флаги - байтовые!, не путайте. |
|||
3
H A D G E H O G s
21.10.14
✎
15:44
|
(1) && - что это?
|
|||
4
supremum
21.10.14
✎
15:45
|
||||
5
supremum
21.10.14
✎
15:47
|
Флаги там битовые:
http://msdn.microsoft.com/en-us/library/cc244854.aspx |
|||
6
H A D G E H O G s
21.10.14
✎
15:48
|
(4) Ясно.
(1) И вернуть оно должно 0 - если флага нет и значение флага, если флаг есть. |
|||
7
DmitrO
21.10.14
✎
15:48
|
туплю, в с++ такой оператор побитного И:
if (value & PRINTER_ATTRIBUTE_DIRECT) { }; |
|||
8
H A D G E H O G s
21.10.14
✎
15:49
|
(7) Все таки побитовые, иначе комбинацию не вернуть в исходное состояние?
|
|||
9
DmitrO
21.10.14
✎
15:51
|
конечно побитовое, тебе же надо проверить наличие определенных битов?
|
|||
10
H A D G E H O G s
21.10.14
✎
15:52
|
(9) Да, все верно, я ступил. Разобрался.
|
|||
11
supremum
21.10.14
✎
15:52
|
Можно еще команду Test на ассемблере применить:
http://www.kolasc.net.ru/cdo/programmes/assembler/test.html |
|||
12
DmitrO
21.10.14
✎
15:53
|
например чтобы проверить наличие обоих битов в value, то так:
if (value & (PRINTER_ATTRIBUTE_DIRECT|PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST)) { }; |
|||
13
H A D G E H O G s
21.10.14
✎
15:54
|
(12) Что вернет это выражение
value & (PRINTER_ATTRIBUTE_DIRECT|PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST) ? |
|||
14
supremum
21.10.14
✎
15:56
|
(13) Ноль, если эти два атрибута не установлены. Не ноль, если хоть один атрибут установлен.
|
|||
15
supremum
21.10.14
✎
15:57
|
a | b - побитовое ИЛИ
|
|||
16
DmitrO
21.10.14
✎
15:57
|
DWORD c установленными в нем битами из числа PRINTER_ATTRIBUTE_DIRECT и PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST, но только те которые были в value.
|
|||
17
H A D G E H O G s
21.10.14
✎
15:57
|
(16) Ясно.
|
|||
18
DmitrO
21.10.14
✎
15:59
|
ну на самом деле не обязательно DWORD, а максимально широкий тип из всех операндов.
|
|||
19
DmitrO
21.10.14
✎
16:01
|
бросай ты свой Delphi, иди к нам на с++, у нас есть печеньки :)
|
|||
20
H A D G E H O G s
21.10.14
✎
16:07
|
(19) У вас в этом вашем C++ загогулина & может иметь до 3-х вариантов использования.
В нашем Дельфи все четко - AND и для логики и для битов и никаких этих ваших &. :-) |
|||
21
H A D G E H O G s
21.10.14
✎
16:08
|
Мы красиво приводим типы
PPrinterInfo2(RawData)^.dmDeviceName |
|||
22
H A D G E H O G s
21.10.14
✎
16:09
|
И у нас нет вот этого кровавого звиздеца
= Прямое присваивание += Присваивание со сложением -= Присваивание с вычитанием *= Присваивание с умножением /= Присваивание с делением %= Присваивание с взятием остатка от деления <<= Присваивание с побитовым сдвигом влево >>= Присваивание с побитовым сдвигом вправо &= Присваивание с побитовым И ^= Присваивание с побитовым XOR |= Присваивание с побитовым OR |
|||
23
НафНаф
21.10.14
✎
16:13
|
(22) в делфях нет оператора ? :
|
|||
24
supremum
21.10.14
✎
16:14
|
На ассемблере еще проще и прозрачнее.
|
|||
25
DmitrO
21.10.14
✎
16:14
|
ну когда я смотрю на арабскую вязь, мне тоже кажется что за адские узоры, как это можно читать.. а на с++ все понятно
|
|||
26
supremum
21.10.14
✎
16:15
|
Там каждый бит в каждом регистре под контролем.
|
|||
27
НафНаф
21.10.14
✎
16:15
|
(20) и логический И в сях может проверят оба условия & или только первое (если оно ложное) &&
В делфях надо директивами управлять |
|||
28
DmitrO
21.10.14
✎
16:18
|
все всегда изначально пишется на с/с++ все остальное - это уже сверху надстройки, баловство.
|
|||
29
SUA
21.10.14
✎
16:21
|
(22)это нямка
кровавый звиздец идет позже после переопределения этих методов |
|||
30
DmitrO
21.10.14
✎
16:21
|
в дельфях много чего нет: множественного наследования и шаблонов (полиморфизма времени компиляции).
|
|||
31
НафНаф
21.10.14
✎
16:21
|
(28) то есть проектов на делфях не бывает?
|
|||
32
NS
21.10.14
✎
16:24
|
(31) Навалом. Даже на акцессе навалом дорогих проектов.
|
|||
33
DmitrO
21.10.14
✎
16:25
|
(31) я немного не про то, сейчас никто не пишет "программы", сейчас все пишут "приложения", т.е. практически любой проект работает на базе какой-то среды, ОС, а то еще и кучу библиотек использует, так вот интерфейс ОС он всегда на С, и библиотеки тоже в первую очередь сишные
|
|||
34
НафНаф
21.10.14
✎
16:30
|
(33) а че не на ассемблере то? ))
|
|||
35
NS
21.10.14
✎
16:34
|
(33) А какая разница на чем он? Используя WinApi разработчику нет смысла задумываться на чем написано.
|
|||
36
DmitrO
21.10.14
✎
16:34
|
(34) нет смысла для общих задач, и еще раз (33) перечитай
|
|||
37
DmitrO
21.10.14
✎
16:38
|
(35) например чтобы использовать винапи из обджект паскаля проделана адская работа по перекладыванию заголовочных файлов windows на на собственно язык понятный компилятору (обджект паскаль). А для си их просто MS выпускает сразу.
|
|||
38
Serginio1
21.10.14
✎
16:42
|
(37) Ну для Net тоже наверное MS interopы делает например
http://msdn.microsoft.com/ru-ru/library/system.windows.interop(v=vs.110).aspx |
|||
39
DmitrO
21.10.14
✎
16:46
|
(38) Net это вообще отдельная история :)
мой бог плачет, когда смотрит на это насилие над мозгом :)) |
|||
40
НафНаф
21.10.14
✎
16:48
|
(39) раскрой тему
|
|||
41
H A D G E H O G s
21.10.14
✎
16:49
|
(37) Ну так это не мы делаем :-)
|
|||
42
vde69
21.10.14
✎
16:51
|
давно не брал в руки сабж, но вроде в дельфи все зависит от деректив компиляции, по умолчанию старший и младший байт идут в порядке обратном плюсам... но там есть директива и специальное резервное слова для передачи параметров в процедуры плюсов...
|
|||
43
DmitrO
21.10.14
✎
16:52
|
Net хорош когда в проекте только Net, но такого практически не бывает, как только появляется IDisposable (а он всегда появляется), все танцуем..
..хотя для современных компов и большинства задач не чувствуется, осталось память не освобожденной какая фигня, у нас ее теперь много.. |
|||
44
vde69
21.10.14
✎
16:52
|
(42) по этому все вызовы апи и обернуты своими обработчиками :)
|
|||
45
Serginio1
21.10.14
✎
17:12
|
(43) Используй юсинги. И проблема IDisposable не в памяти, а в том, что ресурсы (файлы, соккеты итд) остаются открытыми.
|
|||
46
NS
21.10.14
✎
17:14
|
(36) Да какая разница на чем написаны?
В любом случае я их могу спокойно использовать в Делфи, если речь не идет о всяких MFC. |
|||
47
DmitrO
21.10.14
✎
23:30
|
(45) да да, юзинг в юзинг в юзинг при использовании трех объектов работающих с неуправляемыми ресурсами. Посмотрите как наш код красив.
|
|||
48
DmitrO
21.10.14
✎
23:34
|
(45) не только файлы и сокеты, а окна, все объекты гди, все дескрипторы ОС.
|
|||
49
NS
22.10.14
✎
00:53
|
(47)(48) Ничего не понял. Кто мешает мне в Делфи работать с окнами через WinApi? Доступ ровно такой-же как и в С/С++.
|
|||
50
Sasha_Rapira
22.10.14
✎
01:06
|
(19) Delphi для элиты, С++ и у бомжа есть
|
|||
51
Sasha_Rapira
22.10.14
✎
01:09
|
(0) на чем работаешь? я дельфи отдал 10 лет. Щас думать опять вспомнить было, скачал топовую программу Embarcadero Delphi XE7
|
|||
52
H A D G E H O G s
22.10.14
✎
01:58
|
(51) XE6 для релиза, XE5 для отладки (eureka пока только для этой версии есть).
|
|||
53
Serginio1
22.10.14
✎
10:29
|
(48) Ну это лучще чем городить Try Finally городить.
Меня это лично никак не напрягает. И поверь на C# значительно приятнее писать чем на C++. Delphi кстати ближе к C#. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |