Скачать MetaTrader 5

Передать двумерный массив из MQL4 в dll

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
barbarian
339
barbarian  

Нужно контролировать состояние массивов в советнике. Для этого хотелось бы создать dll на C++, которая бы получала двумерные массивы из MQL4 и выводила бы их состояние в отделтное всплывающее окно.

На сколько я понимаю, нужно из MQL4 передать двумерный массив в dll, но как передать именно двумерный массив, если его размерность по первому измерению неизвестна, она меняется в функции в самом MQL4. 

ktest0
631
ktest0  
Создайте динамический массив.
barbarian
339
barbarian  

Я новичок в программировании, помогите разобраться. К примеру есть массив в MQL4

double mass[][6]

1. Как его передать в dll на C++?

2. Как в C++ его вывести в сплывающее окно? 

Alexandre
602
Alexandre  

При ваянии действующей и непадучей длл разнообразного геморроя и так выше крыши, а посему :

-> 1. перепоставить задачу так, чтобы требовалось передавать только одномерные массивы ( способом "мешка с биркой" );

-> 2. основная идея длл в том, что это - библиотека функций, т.е. именно _расчётный_ модуль, поэтому всячески избегать употребления здесь каких-либо графических / оконных элементов;

-> 3. ( такой пункт вскоре непременно образуется ) : при передаче строк наименьшая головная боль наблюдается, когда они - ansi-строки, т.е. для юникода с его подвидами - см. п. 1, предварительно средствами mql преобразовав к char'ам, т.е. байтам;

-> 4. ( и такой пункт вскоре непременно образуется ) : если длл для расчётов использует объекты, лучше всего обернуть их в один, при инициализации получить его хэндл, передать его в mql-программу и дальше вызывать методы, обращаясь к объекту-обёртке по этому хэндлу.

ktest0
631
ktest0  

Думаю Вам проще всего будет это реализовать через файл - индюк выгрузил, модуль на с++ загрузил и удалил и так по кругу.

Комбинатор
16174
Комбинатор  
В MQL4 нет многомерных массивов. Передавайте как одномерный, главное правильно размер высчитать и передать.
barbarian
339
barbarian  

TheXpert:
В MQL4 нет многомерных массивов. Передавайте как одномерный, главное правильно размер высчитать и передать.

Т.е. если массив array[10][6] то его размер будет в одномерном измерении 60?

Комбинатор
16174
Комбинатор  
Barbarian:
Да.
barbarian
339
barbarian  
TheXpert:
Да.
 т.е. в C++ нужно создать класс который будет переводить одномерный массив обратно в двумерный?
Vadim Zhunko
5226
Vadim Zhunko  
Barbarian:
 т.е. в C++ нужно создать класс который будет переводить одномерный массив обратно в двумерный?

Да. Конечно.

Недавно дописал такой класс. Получился реально многомерный динамический массив. Т.е. можно на ходу менять количество измерений без нарушения структуры данных.

А так же, можно инициализировать его указателем на массив. Операторы перегрузил. 348 перегрузок получилось :-))

Примерно так с операторами:

a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.
 Математические операции и разнообразные манипуляции сделал для него. Реверс для индекса есть и многое другое необходимое для работы. 

 ========================

Многомерность массива это только интерфейс. Под ним может скрываться массив массивов, массив указателей на массивы, массив классов-контейнеров, класс-контейнер классов-контейнеров и т.п.

В нашем случае подходит только интерпретация одномерного массива, как многомерного. Иначе, из MQL4 никак не передашь его. 

Dmitry Fedoseev
44506
Dmitry Fedoseev  
Barbarian:
 т.е. в C++ нужно создать класс который будет переводить одномерный массив обратно в двумерный?
Не обязательно. Можно вычислять индекс. Преобразовывать массив кажды раз - это сильно накладно. 
1234567
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий