Библиотеки: Библиотека GlobalArray - разделяемое хранилище массивов в памяти

 

Библиотека GlobalArray - разделяемое хранилище массивов в памяти:

GlobalArray - это удобное дополнение к глобальным переменным МетаТрейдера и замена временным файлам.

Author: Stanislav Korotky

 

Задумка отличная, щас не где применить но с пол года назад была необходимость а библиотеки небыло.

Думаю что многим пригодиться.

 

Интересное решение многих проблем "песочницы"!

Мне интересна библиотека, в первую очередь, в целях самообучения.

marketeer у меня к Вам два вопроса по коду:

- #pragma argsused ???

- trace . cpp???- интересно посмотреть под дебаггером

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

 

Гы, в коде критическая ошибка (проявляется, когда параллельно используется несколько массивов). Но поскольку никто до сих пор не жаловался, пишу просто комментом, для сведения. В деструкторе должно быть:

  for(i = 0; i < GlobalArraySize; i++)
  {
    if(GlobalArrayList[i] == this)
    {
      free(ID);
      if(Values)
      {
        delete [] Values;
        Values = NULL;
        Count = 0;
      }
      break; // нужно добавить! (строка 75)
    }
  }
 

Библиотека старая. Для "новых" терминалов с уникодными строками, импорты должны выглядеть так:

#import "GlobalArray.dll"
int GlobalArraySet(uchar &ID[], double& Array[], int ArrayCount);
int GlobalArrayGet(uchar &ID[], double& Array[], int ArrayCount);
int GlobalArraySize(uchar &ID[]);
int GlobalArrayDelete(uchar &ID[]);
#import

Для конвертации строк можно использовать обертки:

int GlobalArraySetW(string ID, double& Array[], int ArrayCount)
{
  uchar name[];
  StringToCharArray(ID, name);
  return GlobalArraySet(name, Array, ArrayCount);
}

int GlobalArrayGetW(string ID, double& Array[], int ArrayCount)
{
  uchar name[];
  StringToCharArray(ID, name);
  return GlobalArrayGet(name, Array, ArrayCount);
}

int GlobalArraySizeW(string ID)
{
  uchar name[];
  StringToCharArray(ID, name);
  return GlobalArraySize(name);
}

int GlobalArrayDeleteW(string ID)
{
  uchar name[];
  StringToCharArray(ID, name);
  return GlobalArrayDelete(name);
}

Для желающих выкладываю версию с целочисленными массивами (можно хранить цены более экономно и с заданной точностью).

Файлы:
 

Сделайте пожалуйста 64 битную версию для MT5.  Выдает ошибку: MT5 MQLx64\MQL5\Libraries\GlobalArray.dll' is not 64-bit version


 
emarketgal:

Сделайте пожалуйста 64 битную версию для MT5.  Выдает ошибку: MT5 MQLx64\MQL5\Libraries\GlobalArray.dll' is not 64-bit version

У меня сейчас нет оборудования под это дело. Но есть исходники - может кто-то еще адаптирует.

 

Вот есть такая новая версия (для массивов типа int) - включает внутреннюю поддержку широких строк и два варианта сборки для x86 и x64 (я проверял пока только x86, если x64 падает - пишите).

#import "GlobalArray-x86.dll"
// #import "GlobalArray-x64.dll"
  int GlobalArraySet(string ID, int& Array[], int ArrayCount);
  int GlobalArrayGet(string ID, int& Array[], int ArrayCount);
  int GlobalArraySize(string ID);
  int GlobalArrayDelete(string ID);
#import
Файлы: