Я новичок в программировании, помогите разобраться. К примеру есть массив в MQL4
double mass[][6]
1. Как его передать в dll на C++?
2. Как в C++ его вывести в сплывающее окно?
При ваянии действующей и непадучей длл разнообразного геморроя и так выше крыши, а посему :
-> 1. перепоставить задачу так, чтобы требовалось передавать только одномерные массивы ( способом "мешка с биркой" );
-> 2. основная идея длл в том, что это - библиотека функций, т.е. именно _расчётный_ модуль, поэтому всячески избегать употребления здесь каких-либо графических / оконных элементов;
-> 3. ( такой пункт вскоре непременно образуется ) : при передаче строк наименьшая головная боль наблюдается, когда они - ansi-строки, т.е. для юникода с его подвидами - см. п. 1, предварительно средствами mql преобразовав к char'ам, т.е. байтам;
-> 4. ( и такой пункт вскоре непременно образуется ) : если длл для расчётов использует объекты, лучше всего обернуть их в один, при инициализации получить его хэндл, передать его в mql-программу и дальше вызывать методы, обращаясь к объекту-обёртке по этому хэндлу.
Думаю Вам проще всего будет это реализовать через файл - индюк выгрузил, модуль на с++ загрузил и удалил и так по кругу.
TheXpert:
В MQL4 нет многомерных массивов. Передавайте как одномерный, главное правильно размер высчитать и передать.
Т.е. если массив array[10][6] то его размер будет в одномерном измерении 60?
Да.
т.е. в C++ нужно создать класс который будет переводить одномерный массив обратно в двумерный?
Да. Конечно.
Недавно дописал такой класс. Получился реально многомерный динамический массив. Т.е. можно на ходу менять количество измерений без нарушения структуры данных.
А так же, можно инициализировать его указателем на массив. Операторы перегрузил. 348 перегрузок получилось :-))
Примерно так с операторами:
a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.Математические операции и разнообразные манипуляции сделал для него. Реверс для индекса есть и многое другое необходимое для работы.
========================
Многомерность массива это только интерфейс. Под ним может скрываться массив массивов, массив указателей на массивы, массив классов-контейнеров, класс-контейнер классов-контейнеров и т.п.
В нашем случае подходит только интерпретация одномерного массива, как многомерного. Иначе, из MQL4 никак не передашь его.
т.е. в C++ нужно создать класс который будет переводить одномерный массив обратно в двумерный?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужно контролировать состояние массивов в советнике. Для этого хотелось бы создать dll на C++, которая бы получала двумерные массивы из MQL4 и выводила бы их состояние в отделтное всплывающее окно.
На сколько я понимаю, нужно из MQL4 передать двумерный массив в dll, но как передать именно двумерный массив, если его размерность по первому измерению неизвестна, она меняется в функции в самом MQL4.