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

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

int ArrayResize( object&array[], int new_size)
Устанавливает новый размер в первом измерении массива. При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера, в противном случае возвращает -1, и массив не меняет размеры.
Замечание: массив, объявленный на локальном уровне в какой-либо функции, у которого был изменен размер, останется неизменным после завершения работы функции. При повторном вызове функции такой массив будет иметь размер, отличный от объявленного.
Параметры:
array[]   -   Массив для изменения размеров.
new_size   -   Новый размер для первого измерения.
Пример:
double array1[][4];
int    element_count=ArrayResize(array1, 20);
// новый размер - 80 элементов


Это цитата из справки и одновременный ответ автору поста на предмет того что в MQL все массивы одномерные.

 
Debugger:

Это цитата из справки и одновременный ответ автору поста на предмет того что в MQL все массивы одномерные.

Это функционал поверх одномерного массива. Попробуйте доказать обратное.
 
Зачем изобретать велосипед и пытаться казаться умнее разработчиков С++?
 
Debugger:
Зачем изобретать велосипед и пытаться казаться умнее разработчиков С++?

То, что мы думаем, и то, что есть на самом деле  - О-О-О-чень часто РАЗНЫЕ вещи, а тем более, когда мы пытаемся думать за других!

Вы на самом деле думаете, что Вадиму нечем заняться, как только "казаться умнее разработчиков"? Вы так хорошо знаете этого человека, чтобы так фантазировать?! Мне бы было страшно жить в мире, искажённом до такой степени... :)))

А если человек изменяет\доделывает\переделывает что-то, что ранее было создано другими - это его полное право! Это НОРМАЛЬНО - изменять мир под себя, хотя и в противовес принятому "прогибаться под изменчивый мир"... ;)

 

Интересно, где такой "велосипед" лежит? :-))

Прежде, чем написать, перерыл всё. Даже в бусте такого нет. Не говорю уж о С++, который здесь не при чём, и в STL такого тоже нет.

Кстати, полноценного решения у этой задачи нет. Не буду вдаваться в подробности, но возможностей С++ недостаточно для решения этой задачи.

Консультировался на Винграде. Там есть хорошие программисты. Как только узнали задачу, сразу предрекли конкретные проблемы. Конечно, почти со всеми справился. Остались в принципе неразрешимые. Это проблемы связанные с работой с содержимым массива через операторы индексации "[]". Никто в инете не знает, как это сделать. Костыль приделал. Теперь можно почти полноценно работать с операторами "[]", но надо в последнее измерение подавать конкретный тип индекса (что можно запросто забыть сделать и компилятор не предупредит). Тогда работает, как обычный многомерный массив с индексацией через []. Т.е это оператор перегружен 4 раза с разным типом индекса. Одна перегрузка возвращает содержимое ячейки по последнему расчёту линейного индекса предыдущими операторами []. Остальные перегрузки возвращают объект, чтобы можно было ещё раз воспользоваться оператором []. В некоторых случаях срабатыват оператор приведения типа, который возвращает содержимое ячейки, к которой последний раз обращались. В некоторых случаях это не работает. Тут могут возникнуть проблемы, о которых узнаешь только после неправильной работы программы. В некоторых случаях помогает компилятор. В других - исключения, что поставил на возможные ошибки пользователя. Постарался предусмотреть все случаи.

 Основные проблемы это: 

a[0][1][2] = a[0][1][3] + a[0][5][2] / a[0][8][12]; // Здесь на всякий случай надо в последнем измерении использовать тип _SIZE_T. Для логических операций тоже надо.

Есть метод at(). Он полность и полноценно заменяет операторы "[]".

Класс защищён критической секцией для работы в многопоточных приложениях.

 
Zhunko:

Нет, это выше моих сил, я не могу молча это читать.

Ты нуб-велосипедист. Самую простую реализацию выкладывали не так давно в mql5 (!) размером строчек в 100.

 
TheXpert:

Нет, это выше моих сил, я не могу молча это читать.

Ты нуб-велосипедист. Самую простую реализацию выкладывали не так давно в mql5 (!) размером строчек в 100.

Туфта там.
 
Zhunko:
Туфта там.

О да, не туфта только у великого гуру Вадима, склоните колени пред ликом его.

Тьфу мля... У недоучек самое большое ЧСВ. Научился пользоваться msdn-ом и хелпом, написал что-то больше 1000 строк, все, я звезда. Услышал где-то слово синглтон и XP, все, я знаю паттерны и методы программирования. Слепил змейку на коленке -- да я проектировщик шо пипец...

Стыдно должно быть батенька, вроде не мальчик.

 
Вадим! Тебе интересно тратить время на ТАКОЙ ("сам дурак") уровень аргументации "себеседников"???
 
TheXpert:

О да, не туфта только у великого гуру Вадима, склоните колени пред ликом его.

Тьфу мля... У недоучек самое большое ЧСВ. Научился пользоваться msdn-ом и хелпом, написал что-то больше 1000 строк, все, я звезда. Услышал где-то слово синглтон и XP, все, я знаю паттерны и методы программирования. Слепил змейку на коленке -- да я проектировщик шо пипец...

Стыдно должно быть батенька, вроде не мальчик.


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

Ещё раз повторю, я не программист. Я выше этого.

===========

Кстати, у меня нет проектов менее 1000 строк. Обычно в десятки раз больше. Этот класс (базовый) 5110 строк + 2 по 2500 строк класса наследованных от него. Это не считая с десяток подобных, которые используются в проекте.

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