|   |   | 
| 
 | 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#. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |