Обсуждение статьи "Передача данных между индикаторами - простое решение наболевшей проблемы" - страница 2

 

...Только один вопрос – как преобразовать указатель в целое. В этом нам и поможет Dynamic Link Library, а именно, возможности языка C++ по приведению типов данных. В связи с тем, что указатели в C++ являются четырехбайтовым типом данных, в наших целях удобно использовать четырехбайтовый же тип int...

Если не ошибаюсь, автор говорит о неявном преобразовании типов. Очень позновательная статья - огромное спасибо автору.

Ещё хотел добавить, что если понадобится сделать метод SetPtr, то не обойтись без явного приведения типов.

Будет выглядить примерно так

double* SetPtr(int a)
{
  double* a1 = reinterpret_cast <double* > (a);
  return(a1);
}

Вообще, MQL5 выиграл бы сильно, если бы указатели получили широкое признание и использование.

 

Вообще, MQL5 выиграл бы сильно, если бы указатели получили широкое признание и использование.

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

Но разработчики почему-то считают, что мы не в достаточной мере умны, чтобы воспользоваться всеми этими возможностями, а только навредим себе.

Хотя все перечисленное является стандартными средствами ООП и никому особо еще не повредило.

Создается впечатление (у меня), что они просто не в состоянии надежно реализовать эти механизмы.

Печально, что кто-то решил, что этого у нас не будет

 
Zhunko:

Как всё сложно!...

С помщью Ильнура ещё год назад написал библиотеку на MQL4 для работы с памятью. Можно выделять память, двигать указатели, писать и читать, передавать в любые другие программы имя области памяти.

Всё построенно на маппинге. Это существенно проще предлагаемого. 

Как бы эту библиотеку получить? Был бы благодарен. Мне нужно передавать данные между двумя МТ.
 

А можно добавить в DLL функции не только для работы с double, но и для datetime, для long и для int ?

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

Пытался приспособить GetPtr для работы с datetime и long (и через извращения с передвижением бит с int) - не выходит, функция принимает ссылку на массив, и ее нельзя преобразовать.

Кто-нибудь решил данную проблему? 

 

Молчание.

Эх... Придется самому вспоминать С++ и ставить MSVC... 

 
Laryx:

Молчание.

Эх... Придется самому вспоминать С++ и ставить MSVC... 

А сейчас вам никто ничего и не ответит, все ушли на фронт.

Слышали что нибудь об обновлении МТ4 ?

 

Краём уха, краём... :)

Обновление МТ4 мне очень даже кстати - у меня библиотеки большие, но все - на МТ5 (я, видите ли, без ООП  жисть себе не представляю). А ДЦ, нехорошие люди - далеко не все МТ5 на реале имеют... Так что - мне данная новость очень даже кстати.

Но - пока не будет нормального МТ4++  я не вижу смысла приспосабливать код под обновленную платформу. Выйдет что-то вроде официальной беты (да, чтобы со Стандартой Библиотекой, я без нее тоже не желаю советников писать) - вот тогда и начнем преобразование кода...

А сейчас мне - ужасно хочется получать адреса не только массивов double, но и других... А - ёк... Хотел было через преобразование типов обойти проблему (время и лонги - тоже ведь восьмибайтные), но пока не выходит...   

 

Вау ! Похоже, задачу можно победить и без написания библиотеки - просто переименовав импортируемую функцию... Сегодня уже поздно, а завтра - попробуем-попробуем...

Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
  • www.mql5.com
Основы языка / Препроцессор / Импорт функций (#import) - Документация по MQL5
 

Мдя. Рано радовался. GetValue для массивов, отличных от double возвращает что-то совсем не то, что хотелось бы... Увы, без MSVC не обойтись... Эх, давно не брал я в руки шашки...

 

Не понимаю, зачем в MQL нужны указатели? Если вы хотите что-то делать с указателями - делайте это сразу в с++.

Проблем по передаче указателей на другой тип данных и на массивы другого типа - нет! К примеру вот объявление: void  setvar(int& var[]);  для передачи указателя на массив целых чисел (догадаетесь что надо поменять для других типов?)

Накладные расходы с вызовом dll функций не исчезли (билд 646), скажем пустая mql-функция работает быстрее чем пустая dll-функция, но если добавить туда хотя-бы операцию выборки из массива, типа s[i], то уже тут c++ будет в выигрыше, тем не менее количество вызовов надо сводить к минимуму.

Самая большая утечка быстродействия идет при работе с глобальными переменными - они ОЧЕНЬ МЕДЛЕННЫЕ!!! Гораздо проще, если мы уж сделали dll, хранить глобальные переменные там. Для всех копий советников и индикаторов в рамках одного метатрейдера, линкуется одна копия dll, соответственно все ее глобальные переменные являются глобальными для всех окон метатрейдера (эта правда вынуждает персональны данные одного окна хранить либо в экземпляре класса, либо в массиве с доступом по идентификатору окна) 

Причина обращения: