DLL - Возврат(модификация) указателя на массив ? - страница 2

 

Процесы тут не причем. DLL работате в контексте процесса терминала.

 

Если размер возвращаемомго массива не известен за ранее. То придется делать функцию которая узнает этот размер заранее, и потом уже в MQL выделять память нужного размера. И уже только потом передавать в DLL этот массив, после установки его размера к нужному.

Но лучше знать заранее. :)

 
SProgrammer >>:

Я не строю. Вы обьясните, что Вы не понимаете. Я ведь могу только догадываться.

Тем более что я ответил в начале предельно понятно.

Уже понял сам.

В описанном Вами случае память выделять нельзя. Но есть еще один.

Дллка занимается менеджментом памяти, MQL получает голый указатель и работает без вызова сторонних функций.

Т.е. типа:

{
   double Array[];
   int size = 10;
   ArrayResizeEx(Array, size);
   for (int i = 0; i < size)
   {
      Array[i] = i;
   }
   ArrayPushBack(size);
   ArrayClearEx();
}

Есть проблемы -- при неосторожном обращении, а также если обратиться к освобожденным ресурсам -- терминал свалится. Зато возможна вполне быстрая по сравнению реализация массивов.

Не уверен на 100%, что это сделать можно, но на 95% уверен

 

Я незнаю.

Вы так пробовали?

Я не понимаю что это за функции.

Если Вам необходимо таскать с собой. Некий массив от одной функции DLL к другой. То просто заверните его в структуру с длинной и верните ее адрес как int. До тех пор пока не выпустят 64-битный терминал это будет работать.

 
SProgrammer >>:

Я не понимаю что это за функции.

Функции работы с массивами. Пока не делал, но уже планирую :) . Интуитивно это должно пахать намного быстрее, чем встроенные динамические массивы.
 

:) Ааа... Думаю не получится сделать вообще.

 
SProgrammer >>:

:) Ааа... Думаю не получится сделать вообще.

Хз, посмотрим. Зависит от того, как устроен внутри MQL массив.

 
SProgrammer писал(а) >>

:) Ааа... Думаю не получится сделать вообще.

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

Да я думаю и быстрее то нифига не будет. Надо быстро надо просто сделать спец функцию в DLL и туда массив передавать.

 
SProgrammer >>:

Надо быстро надо просто сделать спец функцию в DLL и туда массив передавать.

Нее, вызов функции в MQL не быстрый. Вобщем если получится, обрисую всю картинку.

 
TheXpert писал(а) >>

Хз, посмотрим. Зависит от того, как устроен внутри MQL массив.

А какая разница как они там внутри устроенны. Если там идет по сути маршалинг. Испортить ( переделат ) массив вряд ли получится. Да и нахрена? Я же уже говорил что надо быстро надо в DLL