Ошибки, баги, вопросы - страница 2132

 
fxsaber:

Когда автор является модератором по совместительству.

Скорее, модератор и по совместительству кодер.

 
fxsaber:
Правильно ли, когда автор советников в КБ удаляет в соответствующем обсуждении сторонние комментарии, где указывается на ошибки в его коде?

нет конечно.

 
fxsaber:
Правильно ли, когда автор советников в КБ удаляет в соответствующем обсуждении сторонние комментарии, где указывается на ошибки в его коде?
Нет конечно. Такие комментарии способствуют исправлению этих ошибок. Их умалчивание или затирание делает КБ плохим пособием. 
 

Не понял, а какой смысл в MQL было делать все наоборот?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
по факту MQL::printf соответствует CPP::wprintf при том, что аналог CPP::printf в MQL отсутствует
 
A100:

Не понял, а какой смысл в MQL было делать все наоборот?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
по факту MQL::printf соответствует CPP::wprintf при том, что аналог CPP::printf в MQL отсутствует
MQL5 весь юникодный, так что мы полностью отказались от однобайтных строк.
 
Renat Fatkhullin:
MQL5 весь юникодный, так что мы полностью отказались от однобайтных строк.

Не верю что полностью! Все работает

void OnStart()
{
        uchar ch[] = { 0x41,0x6E,0x73,0x69,0x20,0x69,0x73,0x20,0x61,0x6C,0x69,0x76,0x65,0x21 };
        string ansi;
        for ( int i = 0, j = 0; i < ArraySize( ch ); i+=2, j++ )
                StringSetCharacter( ansi, j, ch[ i ] | ch[ i + 1 ] << 8 );
        printf( "%S", ansi );
}

Результат: Ansi is alive!

 
A100:

Не верю что полностью! Все работает

Результат: Ansi is alive!

Упаковать бинарно в unicode, а потом получить риск взорваться на вызове через системную функцию неразумно.

Скорее всего отфильтруем такие попытки позже.

 
Renat Fatkhullin:

получить риск взорваться на вызове через системную функцию неразумно.

Не стоит преувеличивать поскольку string гарантированно завершается нулем. И кроме того однобайтовые символы наряду с многобайтовыми фактически являются частью Юникода и в MQL тоже все это прекрасно работает благодаря чему например есть возможность вывода во вкладку Эксперты нормальным (а не этим ужасным моноширинным) шрифтом.

Это все равно что запретить вызов из dll функции с аргументом uchar[] опасаясь что пользователь неправильно его заполнит (например не завершит нулем), при том что многие системные функции требуют именно uchar[], а не ushort[] (который кстати тоже можно неправильно заполнить)

 

2-ая строка - вывод человеческим (не моноширинным) шрифтом. Как видите технически не сложно оставить моноширинный шрифт только для ::ArrayPrint()

 

Здравствуйте. Помогите пожалуйста найти причину ошибки. Перевожу индикатор с mql4 на mql5. Для функций iHigh использую следующую "оболочку":

double iHigh(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double Arr[1];
   if(CopyHigh(symbol,tf,index,1,Arr)>0)
      return(Arr[0]);
   else
     {
      Print(__FUNCTION__,GetLastError());
      return(-1);
     }
  }

В итоге получаю ошибку 4301: "Неизвестный символ", хотя в качестве параметра symbol передается строка возвращаемая функцией Symbol(). Вот кусок кода функции, которая вызывает iHigh

ENUM_TIMEFRAMES tf=Period();
   string symbol = Symbol();
   if(filtr1==false) 
      return(true);  
   int i1,i2=0; 
   for(i1=i+1; i2<6; i1++)
     {
      
      if(iLow(symbol,tf,i1)<=iLow(symbol,tf,i1+1) && 
         iHigh(symbol,tf,i1)>=iHigh(symbol,tf,i1+1)) 
        {
         break; //выход из цикла
        }
      else
        {
         i2++;
        }
     }
Причина обращения: