Извлечение 2-х массивов из dll

 

Всем доброго времени суток!

Столкнулся с проблемой извлечения 2-х массивов из dll (Pascal) . Что-то сразу не очень получилось.

Были-ли у кого аналогичные проблемы. Если да то как были решены?

Заранее благодарен. 

 

Функция не может вернуть 2 параметра. Как варианты решений:

 - извлекать 2 массива двумя разными функциями

 - склеить 2 массива в 1 через какой-нибудь заранее задуманный разделитель (если они однотипные) 

 - вписать содержимое массивов в текстовый документ и научить своеника считывать из него данные.

 

Из dll в мт вообще нельзя вернуть массив (даже 1) :)

определи массив(ы) в коде mql, передай их в функцию по ссылке, и модифицируй значения внутри функции. 1 минус - только статический размер массивов.

 
Благодарю.
 
Операторами new и delete менял размерность как угодно, но это в  С++, не знаю как там в паскале...
JavaDev:

Из dll в мт вообще нельзя вернуть массив (даже 1) :)

определи массив(ы) в коде mql, передай их в функцию по ссылке, и модифицируй значения внутри функции. 1 минус - только статический размер массивов.

 
паскаль в этом плане глухо, либо я не знаю как это делать (скорее всего второе).
 
 

Менять размер MQL массива можно только в MQL.

Как-нить так:

{
   int size1 = 20, size2 = 20;
   double array1[], array2[];

   ArrayResize(array1, size1);
   ArrayResize(array2, size2);
   
   // bool GetArrays(double& array1[], double& array2[], int& size1, int& size2);
   if (GetArrays(array1, array2, size1, size2))
   {
      ArrayResize(array1, size1);
      ArrayResize(array2, size2);
   }
   else
   {
      ArrayResize(array1, size1);
      ArrayResize(array2, size2);
      
      GetArrays(array1, array2, size1, size2);
   }
}

Паскаль уже не помню, поэтому функцию GetArrays тоже накидаю на mql --

bool GetArrays(double& array1[], double& array2[], int& size1, int& size2)
{
   double outArray1[], outArray2[]; // это те массивы, что нам надо достать из ДЛЛ
   int outSize1, outSize2; // это размеры массивов -- мы их должны знать.
   
   if (size1 >= outSize1 && size2 >= outSize2)
   {
      //... //поэлементное копирование outArray1 в array1 и outArray2 в array2
      size1 = outSize1;
      size2 = outSize2;
      return (true);
   }
   else
   {
      size1 = outSize1;
      size2 = outSize2;
      return (false);
   }
   
   return (false);
}
Надеюсь, принцип понятен.
 
Да, благодарю.
Причина обращения: