Новая версия платформы MetaTrader 5 build 5100: Переход на Git и хаб разработчиков MQL5 Algo Forge, темная тема и улучшения интерфейса - страница 22

 

Почему-то меняется цвет индикатора...

Жму только "Компилировать".

 
fxsaber #:

Такой костыль.

Не вижу потенциальных проблем, если такие перегрузки будут добавлены. Поддерживаю. ZIP-библиотеку пришлось править.

Я видимо совсем криворукий. У меня не работает...

void OnStart()
  {
//===============
   char  data[]; 
   uchar data2[];
   const bool swapresult = ::ArraySwap(data,data2);
//===============

//===============
   ::Print(swapresult);
//===============
   
  }
 
Andrey Barinov #:

Я видимо совсем криворукий. У меня не работает...

У меня тоже ArraySwap не захотел копировать массив, пришлось использовать ArrayCopy.

 
То же не работает:
void OnStart(){
   char a1[];  uchar a2[];
   ArrayResize(a1,3); a1[0]=0;a1[1]=-5;a1[2]=5;ArrayResize(a2,3);
   Print("a1");ArrayPrint(a1);Print("a2");ArrayPrint(a2);ResetLastError();
   if(!CharToUchar(a1,a2)){Print("error ",GetLastError());}
   Print("a1");ArrayPrint(a1);Print("a2");ArrayPrint(a2);ResetLastError();
   if(!UcharToChar(a2,a1)){Print("error ",GetLastError());}
   Print("a1");ArrayPrint(a1);Print("a2");ArrayPrint(a2);
}

bool CharToUchar(char& a1[], uchar& a2[]){return ArraySwap(a1,a2);}
bool UcharToChar(uchar& a1[], char& a2[]){return ArraySwap(a1,a2);}

Вывод

a1
 0 -5  5
a2
error 4006
a1
 0 -5  5
a2
error 4006
a1
 0 -5  5
a2

ERR_INVALID_ARRAY

4006

Массив неподходящего типа, неподходящего размера или испорченный объект динамического массива

a2 - остается пустым после обмена.

Видимо char и uchar теперь тоже под запретом для swap, т.к. разные типы. Странно, что ArrayCopy обошел запрет.

Будем делать быстрые MT программы медленными... прогресс наоборот.
 
Может как то union все же можно приспособить?

К разработчикам: почему union не находится поиском на сайте? Пришлось гуглом искать... У вас есть предложение для быстрого обмена char/uchar?
 
Forester #:
Может как то union все же можно приспособить?

К разработчикам: почему union не находится поиском на сайте? Пришлось гуглом искать...

всегда так было, разработчики объяснили это по типу мы не поисковая система

всегда если знаешь ключевые слова надо искать через поисковые системы

сайт похоже на аутсорсе, некому пинка давать там.


должен извиниться, писал что выделенный шрифт не видно стало,- стояло 110% , т.е. плюс 10% увеличение, и там почти нет выделения шрифта

 
Forester #:
Может как то union все же можно приспособить?

У меня не получилось. Дин. массивы на унион можно сделать, но в webRequest его не передашь - не тот тип.

union cu{ char a1; uchar a2;};
void OnStart(){
   cu s[];
   ArrayResize(s,3); s[0].a1=0;s[1].a1=-5;s[2].a1=5;
   Print("s");ArrayPrint(s);
   //Char(s); Uchar(s);
}
void Char(char& a[]){Print("char");ArrayPrint(a);}
void Uchar(uchar& a[]){Print("uchar");ArrayPrint(a);}

s
    [a1] [a2]
[0]    0    0
[1]   -5  251
[2]    5    5

 
Forester #:
То же не работает:

Вывод

ERR_INVALID_ARRAY

4006

Массив неподходящего типа, неподходящего размера или испорченный объект динамического массива

a2 - остается пустым после обмена.

Видимо char и uchar теперь тоже под запретом для swap, т.к. разные типы. Странно, что ArrayCopy обошел запрет.

Будем делать быстрые MT программы медленными... прогресс наоборот.
Тогда меняйте справку:
Примечание

Функция принимает динамические массивы одинакового типа и одинаковых размерностей, кроме первой. Для целых типов знак игнорируется, т.е. char==uchar)

Уже не действительно
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как...
 

https://www.mql5.com/ru/docs/array/arraycopy

ArrayCopy ....
Если массивы разных типов, то при копировании производится попытка преобразования каждого элемента исходного массива к типу приемного массива.

Поэлементно... видимо for(i){ a1[i]=(uchar)a2[i];}
хорошо прибавит к времени работы при скачивании гигабайтов архивов.

Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
Производит копирование одного массива в другой. Параметры dst_array[] [out]  Массив-приемник. src_array[] [in]  Массив-источник...
 
Forester #:

У меня не получилось. Дин. массивы на унион можно сделать, но в webRequest его не передашь - не тот тип.

Внутри юнион должно быть два статических массива одного размера uchar, char. С динамическими не получится.