Новая версия платформы MetaTrader 5 build 4755: общие улучшения - страница 31

 
Stanislav Korotky #:

из библиотеки экспортируются функции-фабрики, возвращающие указатель на объект

Возможно, дадите ответы на два вопроса по библиотекам: первый, второй.

С библиотеками никогда не работал, первый блин с ними - MT4Orders.

Мне надо как-то из MT4Orders суметь сообщить, что MT4Orders встроена в советник в виде mqh или ex5. Не смог придумать, как это сделать.


ЗЫ Для запуска EX5 в других терминалах использовал такую идентификацию библиотек.

  static bool IsLibraryOrService( const string FileName )
  {
      bool Res = true;
      const HANDLE handle = kernel32::CreateFileW(FileName, GENERIC_READ, SHARE_READ, 0, OPEN_EXISTING, 0, 0);

      if (handle != INVALID_HANDLE)
      {
        uchar Buffer[4];
        uint Read;

        kernel32::ReadFile(handle, Buffer, sizeof(Buffer), Read, 0);
        Res = (Read < sizeof(Buffer)) || ((Buffer[3] == 3) || (Buffer[3] == 5)); // 1 - Script, 2 - Expert, 3 - Library, 4 - Indicator, 5 - Service.

        kernel32::CloseHandle(handle);
      }

    return(Res);
  }
Но это другая тема.
 
fxsaber # :


Видимо, есть какая-то общая таблица указателей на весь Терминал, что получается работать с передачей указателей из одного EX5 в другой.

Я в этом сомневаюсь, библиотека ex5 работает в том же потоке, что и основной ex5.

Таким образом, указатели являются общими не для Терминала, а для каждого потока.

 
Alain Verleyen #:

Я в этом сомневаюсь, библиотека ex5 работает в том же потоке, что и основной ex5.

Таким образом, указатели являются общими не для Терминала, а для каждого потока.

Возможно, Вы правы.

 

при одинаковой сборке МТ5 4885 в редакторе 2 разных стиля оформления, где это выбирается? это на одном компьютере Windows 10


 
fxsaber #:

Это медленнее работает, чем

if (ptr != NULL)

Не помню, с какого билда. Пришлось в Virtual переделывать - достиг заметного ускорения.

Про это в книге тоже написано в разделе про указатели. Дело в том, что сравнение с NULL не эквивалентно if(ptr).

Сравнение с NULL тупо проверяет на ненулёвость (как число, и всё), но не гарантирует правильность (валидность) ссылки.

Проверка if(ptr) эвивалента if(CheckPointer(ptr) != POINTER_INVALID), то есть выполняет важную дополнительную работу и гарантирует работоспособность программы.

Так что решайте сами, что важнее - повысить быстродействие за счет потенциального падения программы или оставить её чуть более медленной, но надежной.

 
fxsaber #:

Возможно, дадите ответы на два вопроса по библиотекам: первый, второй.

Мне надо как-то из MT4Orders суметь сообщить, что MT4Orders встроена в советник в виде mqh или ex5. Не смог придумать, как это сделать.


Ответил там. По поводу инлайнинга экспортируемых функций ничего не знаю - не задавался этим вопросом.

 

Доп. информация по поводу проблемы с запуском под wine:

https://www.mql5.com/ru/forum/10113/page12#comment_56404046

 

Сомнительная стилизация от встроенного стилизатора

Баг (или фича) найден пользователем @c327515.
ссылка на его тему

 
b4885, просьба дополнить ENUM_DEAL_TYPE-перечисление.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2025.04.09 17:59

Недокументированный DEAL_TYPE: so compensation.

void OnStart()
{  
  const ulong Ticket = 786026654;
  
  if (HistoryDealSelect(Ticket))
    Print(EnumToString((ENUM_DEAL_TYPE)HistoryDealGetInteger(Ticket, DEAL_TYPE))); // ENUM_DEAL_TYPE::19
}
Thing
  • schema.org
Schema.org Property: text - The textual content of this CreativeWork.
 
Выше в сообщение автоматически добавился schema.org. Для воспроизведения нужно скопировать нижнюю строку "Строка для ...."