Erreurs, bugs, questions - page 2132

 
fxsaber:
Est-il juste que l'auteur d'une EA à KB supprime les commentaires de tiers dans la discussion correspondante qui signalent des erreurs dans son code ?

Non, bien sûr.

 
fxsaber:
Est-il juste que l'auteur d'une EA à KB supprime les commentaires de tiers dans la discussion correspondante qui signalent des erreurs dans son code ?
Non, bien sûr que non. Ces commentaires contribuent à la correction de ces erreurs. Les réduire au silence ou les écraser fait du KB un mauvais manuel.
 

Je ne comprends pas, quel était l'intérêt de faire l'inverse dans MQL ?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
en fait MQL::printf correspond à CPP::wprintf, bien qu'il n'y ait pas d'analogue de CPP::printf dans MQL
 
A100:

Je ne comprends pas, quel était l'intérêt de faire l'inverse dans MQL ?

C++ VS2017
MQL
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
En fait, MQL::printf correspond à CPP::wprintf, bien qu'il n'y ait pas d'analogue de CPP::printf dans MQL.
MQL5 est entièrement unicode, nous avons donc complètement abandonné les chaînes de caractères à un octet.
 
Renat Fatkhullin:
MQL5 est entièrement unicode, nous avons donc complètement abandonné les chaînes de caractères à un octet.

Je ne le crois pas complètement ! Tout fonctionne.

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 );
}

Résultat : Ansi est vivant !

 
A100:

Je ne le crois pas complètement ! Tout fonctionne.

Résultat : Ansi est vivant !

Il n'est pas judicieux d'empaqueter du binaire en unicode et de prendre ensuite le risque d'exploser lors d'un appel via une fonction système.

Ces tentatives seront probablement filtrées plus tard.

 
Renat Fatkhullin:

Il est déraisonnable de prendre le risque d'exploser sur un appel de fonction système.

N'exagérez pas car la chaîne est garantie de se terminer par zéro. De plus, les caractères à un seul octet et ceux à plusieurs octets font partie d'Unicode et dans MQL, tout fonctionne bien aussi, ce qui permet de sortir en tabulation Experts avec une police normale (et non avec cette affreuse police monospace).

Cela revient à interdire l'appel d'une fonction dll avec l'argument uchar[], de peur que l'utilisateur le remplisse incorrectement (par exemple, qu'il ne se termine pas par un zéro), alors que de nombreuses fonctions du système requièrent exactement uchar[] et non ushort[] (qui, par ailleurs, peut aussi être rempli incorrectement).

 

La 2ème ligne est la sortie en police humaine (non monospace). Comme vous pouvez le voir, il est techniquement facile de laisser la police monospace uniquement pour ::ArrayPrint()

 

Bonjour. Veuillez m'aider à trouver la cause de cette erreur. J'essaie de convertir un indicateur de mql4 en mql5. J'utilise le "shell" suivant pour les fonctions 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);
     }
  }

En conséquence, je reçois l'erreur 4301 : "Unknown symbol", même si une chaîne de caractères renvoyée par la fonction Symbol() est passée comme paramètre du symbole. Voici un morceau de code de la fonction qui appelle 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++;
        }
     }
 
Erreur dans CCanvas::Attach. Ligne en surbrillance manquante
//+------------------------------------------------------------------+
//| Attach new object without bitmap resource                        |
//+------------------------------------------------------------------+
bool CCanvas::Attach(const long chart_id,const string objname,const int width,const int height,ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA)
  {
   if(OBJ_BITMAP_LABEL==ObjectGetInteger(chart_id,objname,OBJPROP_TYPE))
     {
      string rcname=ObjectGetString(chart_id,objname,OBJPROP_BMPFILE);
      if(StringLen(rcname)==0 && width>0 && height>0 && ArrayResize(m_pixels,width*height)>0)
        {
         ZeroMemory(m_pixels);
         if(ResourceCreate("::"+objname,m_pixels,width,height,0,0,0,clrfmt) && 
            ObjectSetString(chart_id,objname,OBJPROP_BMPFILE,"::"+objname))
           {
            m_chart_id = chart_id;
            m_width=width;
            m_height=height;
            m_objname=objname;
            m_rcname="::"+objname;
            m_format=clrfmt;
            m_objtype=OBJ_BITMAP_LABEL;
            //--- success
            return(true);
           }
        }
     }
//--- failed
   return(false);
  }