bool в терминале на самом деле int. Думаю, 4-х байтный.
Ну, дык LongBool именно 4х-байтный тип. Документацию читал ;).
Сталкивались с аналогичной проблемой передачи типа bool из программы на С++ в MT4. До коликов смеялись :))))))
В итоге нашли 2 выхода:
Первый - замена типа bool типом int (1-true, 0 - false) ,но это неинтересно.
И второй - передача не самой переменной типа bool, а переменной после каких-либо простейших булевских преобразований, которые в конечном счете не изменят переменную.
У нас было неважно, что возвращается, поэтому возвращали инвертированное значение.
return !pData->Sync_enter;
И все нормально заработало :)))
И второй - передача не самой переменной типа bool, а переменной после каких-либо простейших булевских преобразований, которые в конечном счете не изменят переменную.
Не очень понял решение. Пробовал:bool TrueFunc() { return (False); } DatabaseDebugModeEnabled(!TrueFunc());
DatabaseDebugModeEnabled((1==1));
int i = 10; DatabaseDebugModeEnabled((i==10));Ни одно решение, кроме замены на параметр int не работает.
Вряд ли. Если в прототипе mql меняешь bool на int, то работает, Delphi код я при этом не трогаю. На уровне машинного кода LongBool и Integer равноценны.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пишу DLL на Delphi.
library
...
procedure DatabaseDebugModeEnabled(Enabled:LongBool);stdcall;
begin
DebugLog('DebugModeEnabled'+IntToStr(Ord(Enabled)));
end;
...
export
DatabaseDebugModeEnabled;
...
В mqh-файле прототип функции описан как:
#import "ExpertBase.dll"
void DatabaseDebugModeEnabled(bool Enabled);
#import
При вызове из скрипта:
DatabaseDebugModeEnabled(True); //в логе DebugModeEnabled0 - то есть, Enabled = false
DatabaseDebugModeEnabled(False);//в логе DebugModeEnabled0 - то есть, Enabled = false
если вместо bool в прототипе написать int:
#import "ExpertBase.dll"
void DatabaseDebugModeEnabled(int Enabled);
#import
DatabaseDebugModeEnabled(1); //в логе DebugModeEnabled1 - то есть, Enabled = true
DatabaseDebugModeEnabled(0); //в логе DebugModeEnabled0 - то есть, Enabled = false
Я так понимаю, это какая-то проблема с передачей параметра типа bool.
Заранее спасибо