Неоднократно встречал на форуме обсуждение пользователей об отсутствие в MetaEditor предопределенного макроса, аналогичного _WIN64. Ответ администрации был, что нет необходимости, поскольку MetaEditor генерирует универсальный одновременно 32-64-х разрядный код.
И действительно, если использовать готовую .dll (которую уже нельзя изменить) то без дополнительного выравнивания не обойтись. Но в x86 и x64 это дополнение может выглядеть по разному, а значит необходимость в аналоге _WIN64 все-таки есть, поскольку структура задается на этапе компиляции .mq5 файла где TerminalInfoInteger( TERMINAL_X64 ) не работает
Сейчас нужно лишнюю информацию держать в уме. В результате экономии на пустяке есть риск получить трудноуловимую ошибку
Вот пример от разработчиков - GetOpenFileName, которая работает в x64 и x86. Посмотрите, решает ли он вопрос
при том что программы с .dll не для массового сегмента Опять же должен быть выбор: раздельная (32\64) компиляция и в 2 раза проще код или универсальность и существенное усложение кода И кроме того аналог _WIN64 можно ввести по принципу _IsX64 (не документирован но пользоваться можно)
Дополнительный аргумент - часто к проекту приложена только одна .dll (либо только x86, либо только x64) и нельзя в .mqh файле этого проекта задать строку вида
//+------------------------------------------------------------------+ //| Cоздает прямоугольник по заданным координатам | //+------------------------------------------------------------------+ bool RectangleCreate(constlong chart_ID=0, // ID графика conststring name="Rectangle", // имя прямоугольника constint sub_window=0, // номер подокна datetime time1=0, // время первой точки double price1=0, // цена первой точки datetime time2=0, // время второй точки double price2=0, // цена второй точки constcolor clr=clrRed, // цвет прямоугольника constENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника constint width=1, // толщина линий прямоугольника constbool fill=false, // заливка прямоугольника цветом < --- Есть только тут дальше в коде нетconstbool back=false, // на заднем плане constbool selection=true, // выделить для перемещений constbool hidden=true, // скрыт в списке объектов constlong z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точек привязки, если они не заданы
ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- сбросим значение ошибки ResetLastError();
//--- создадим прямоугольник по заданным координатам if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольника ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение return(true);
}
Отсюда вопрос, как изменить заливку в OBJ_RECTANGLE в мт 4 ???
Это не ошибка. Компилятор сам решает в каком порядке вычислять аргументы.
Ошибка заключается в следующем: еще недавно порядок строго определялся https://www.mql5.com/ru/forum/1111/page2040#comment_5858419 (обратите внимание на дату и выдержку из документации: гарантируется). Потом порядок потихому поменяли (в том числе в документации), причем поменять его можно было цивилизованно - через inline https://www.mql5.com/ru/forum/1111/page2042#comment_5860752. А как пользователь должен узнать об этом? Догадаться? Или перед использованием любого инструмента смотреть документацию?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Неоднократно встречал на форуме обсуждение пользователей об отсутствие в MetaEditor предопределенного макроса, аналогичного _WIN64. Ответ администрации был, что нет необходимости, поскольку MetaEditor генерирует универсальный одновременно 32-64-х разрядный код.
В то же время многие используют выравнивание https://www.mql5.com/ru/forum/225498/page2#comment_6401835 путем дополнения полей структуры
И действительно, если использовать готовую .dll (которую уже нельзя изменить) то без дополнительного выравнивания не обойтись. Но в x86 и x64 это дополнение может выглядеть по разному, а значит необходимость в аналоге _WIN64 все-таки есть, поскольку структура задается на этапе компиляции .mq5 файла где TerminalInfoInteger( TERMINAL_X64 ) не работает
Сейчас нужно лишнюю информацию держать в уме. В результате экономии на пустяке есть риск получить трудноуловимую ошибку
Вот пример от разработчиков - GetOpenFileName, которая работает в x64 и x86. Посмотрите, решает ли он вопрос
Вот пример от разработчиков - GetOpenFileName, которая работает в x64 и x86. Посмотрите, решает ли он вопрос
Фактически кода требует почти в два раза больше,
при том что программы с .dll не для массового сегмента
Опять же должен быть выбор: раздельная (32\64) компиляция и в 2 раза проще код
или универсальность и существенное усложение кода
И кроме того аналог _WIN64 можно ввести по принципу _IsX64 (не документирован но пользоваться можно)
Дополнительный аргумент - часто к проекту приложена только одна .dll (либо только x86, либо только x64) и нельзя в .mqh файле этого проекта задать строку вида
Например здесь https://www.mql5.com/ru/forum/224745Пример из справки
Отсюда вопрос, как изменить заливку в OBJ_RECTANGLE в мт 4 ???
Renat Fatkhullin:
Мы нацелены вообще скоро остановить разработки 32 битных версий Метатрейдера.
Желательно к этому моменту исправить все известные ошибки возникающие при выполнении, например эту #1841289 https://www.mql5.com/ru/forum/1111/page2025#comment_5766707
Поведение этого и других operator не соответствует методам. При том что operator по отношению к методам является не более чем синтаксическим сахаром
Аргументы функции вычисляются не справа налево
Результат строки (*) : 0:5041
Ожидалось в обоих случаях: 0:0
Аргументы функции вычисляются не справа налево
Результат строки (*) : 0:5041
Ожидалось в обоих случаях: 0:0
Это не ошибка. Компилятор сам решает в каком порядке вычислять аргументы.
Надо просто это учитывать.
Это не ошибка. Компилятор сам решает в каком порядке вычислять аргументы.
Ошибка заключается в следующем: еще недавно порядок строго определялся https://www.mql5.com/ru/forum/1111/page2040#comment_5858419 (обратите внимание на дату и выдержку из документации: гарантируется). Потом порядок потихому поменяли (в том числе в документации), причем поменять его можно было цивилизованно - через inline https://www.mql5.com/ru/forum/1111/page2042#comment_5860752. А как пользователь должен узнать об этом? Догадаться? Или перед использованием любого инструмента смотреть документацию?
Ошибки при компиляции и не только