Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.02.04;
Скачать: CL | DM;

Вниз

Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE?   Найти похожие ветки 

 
Незарегистрированный   (2016-02-15 17:46) [0]

У меня довольно глупый вопрос по WinAPI... Точнее как с Си переводится на паскаль...

Вот что написано в доках:


> When the wParam parameter is FALSE,
> an application should return TRUE to бла-бла,
> or it should return FALSE to бла-бла-бла.


Делаю так:

if wParam=0 then result:=1;

Поведение вообще не такое как должно быть.
Си не изучал, только синтаксис понимаю. Подскажите пожалуйста - как правильно отобразить Сишные TRUE и FALSE в Паскаль?


 
Dimka Maslov ©   (2016-02-15 18:44) [1]

Бывают разные случаи.

1. FALSE это нуль, TRUE это не нуль (обычно это тип BOOL)
2. FALSE это нулевой первый бит, TRUE это единичный первый бит, в старших битах может быть что угодно (обычно это тип bool)

и всякие экзотические варианты, например, когда TRUE это -1...


 
sniknik ©   (2016-02-15 18:54) [2]

> и всякие экзотические варианты, например, когда TRUE это -1...
дельфя -
 Memo1.Lines.Add(IntToStr(Integer(boolean(true))));
 Memo1.Lines.Add(IntToStr(Integer(boolean(false))));
 Memo1.Lines.Add(IntToStr(Integer(BOOL(true))));
 Memo1.Lines.Add(IntToStr(Integer(BOOL(false))));

> как правильно отобразить Сишные TRUE и FALSE в Паскаль
не поверишь... пиши true и false будет однозначно.


 
Незарегистрированный   (2016-02-15 19:09) [3]

> не поверишь... пиши true и false будет однозначно.

wParam это WPARAM это Longint
result это LRESULT это тоже Longint
Просто "пиши true и false" даёт "Incompatible types: "Integer" and "Boolean"".

Или вы так предлагаете?:

if wParam=Integer(BOOL(False)) then result:=Integer(BOOL(True));

Всё равно нет нужного поведения...
гм. Перепишу-ка на Си, посмотрю как там будет работать. Может в доках опечатка?


 
sniknik ©   (2016-02-15 21:23) [4]

> Или вы так предлагаете?:
> if wParam=Integer(BOOL(False)) then result:=Integer(BOOL(True));
просто
if wParam=Integer(False) then result:=Integer(True);

> Всё равно нет нужного поведения...
значения в коде выше смотрел?


 
Игорь Шевченко ©   (2016-02-15 21:41) [5]


> Делаю так:
>
> if wParam=0 then result:=1;


Правильно делаешь


> Поведение вообще не такое как должно быть.


значит ошибка в другом месте



Страницы: 1 вся ветка

Текущий архив: 2018.02.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
1-1351687767
cobalt
2012-10-31 16:49
2018.02.04
Декларация и исполнение процедур/функций


2-1455547592
Незарегистрированный
2016-02-15 17:46
2018.02.04
Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE?


15-1469302746
Юрий Зотов
2016-07-23 22:39
2018.02.04
Как много нам открытий чудных...


2-1454909399
Signal
2016-02-08 08:29
2018.02.04
Сети..Сети..и выбор интерфейса в TServerCocket


2-1455227853
Dmk
2016-02-12 00:57
2018.02.04
Округление