Hatalar, hatalar, sorular - sayfa 2132

 
fxsaber :

Yazar yarı zamanlı bir moderatör olduğunda.

Aksine, bir moderatör ve yarı zamanlı kodlayıcı.

 
fxsaber :
KB'deki danışmanların yazarı, kodundaki hataların belirtildiği ilgili tartışmada üçüncü taraf yorumlarını kaldırdığında doğru mu?

Tabii ki değil.

 
fxsaber :
KB'deki danışmanların yazarı, kodundaki hataların belirtildiği ilgili tartışmada üçüncü taraf yorumlarını kaldırdığında doğru mu?
Tabii ki değil. Bu tür yorumlar, bu hataların düzeltilmesine katkıda bulunur. Bunların ihmal edilmesi veya silinmesi, KB'yi zayıf bir rehber haline getirir.
 

Anlamadım, MQL'de her şeyi tersinden yapmanın anlamı neydi?

C++ VS2017
MQL
printf ( "%s", ... )
printf("%S", ... )
printf("%S", ... )
printf( "%s", ... )
printf("%c", ...)
printf("%C", ...)
printf("%C", ...)
printf("%c", ...)
aslında, MQL::printf, CPP::wprintf'e karşılık gelirken, MQL'de CPP::printf'in bir benzeri yoktur.
 
A100 :

Anlamadım, MQL'de her şeyi tersinden yapmanın anlamı neydi?

C++ VS2017
MQL
printf( "%s", ... )
printf("%S", ... )
printf("%S", ... )
printf( "%s", ... )
printf("%c", ...)
printf("%C", ...)
printf("%C", ...)
printf("%c", ...)
aslında, MQL::printf, CPP::wprintf'e karşılık gelirken, MQL'de CPP::printf'in bir benzeri yoktur.
MQL5'in tamamı Unicode'dur, bu nedenle tek baytlık dizeleri tamamen terk ettik.
 
Renat Fatkhullin :
MQL5'in tamamı Unicode'dur, bu nedenle tek baytlık dizeleri tamamen terk ettik.

Tamamen inanmıyorum! her şey çalışıyor

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

Sonuç: Ansi yaşıyor!

 
A100 :

Tamamen inanmıyorum! her şey çalışıyor

Sonuç: Ansi yaşıyor!

İkili dosyayı unicode'a paketlemek ve ardından bir sistem işlevi aracılığıyla yapılan bir çağrıda patlama riskini almak mantıksızdır.

Büyük olasılıkla bu tür girişimleri daha sonra filtreleyeceğiz.

 
Renat Fatkhullin :

bir sistem işlevi aracılığıyla yapılan bir aramada patlama riskini almak akıllıca değildir.

Dizenin boş sonlandırılacağı garanti edildiğinden abartmayın. Ayrıca, çok baytlı karakterlerle birlikte tek baytlı karakterler aslında Unicode'un bir parçasıdır ve MQL'de de tüm bunlar iyi çalışır, örneğin, Uzmanlar sekmesinde normal olarak görüntülenebilir ( ve o korkunç monospace değil) yazı tipi.

Birçok sistem işlevinin tam olarak uchar[] gerektirmesine rağmen, kullanıcının onu yanlış dolduracağından (örneğin, sıfırla bitmeyeceğinden) korkarak, bir dll işlevinden bir uchar[] argümanıyla bir çağrıyı yasaklamak gibidir, ve ushort[] değil (bu arada, yanlış doldurma da olabilir)

 

2. satır - insan (tek aralıklı değil) yazı tipinde çıktı. Gördüğünüz gibi, yalnızca ::ArrayPrint() için tek aralıklı bir yazı tipi bırakmak teknik olarak zor değil.

 

Merhaba. Lütfen hatanın nedenini bulmama yardım edin. Göstergeyi mql4'ten mql5'e aktarıyorum. iHigh işlevleri için aşağıdaki "kabuğu" kullanıyorum:

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

Sonuç olarak, Symbol() işlevi tarafından döndürülen dize sembol parametresi olarak iletilmesine rağmen 4301: "Bilinmeyen sembol" hatası alıyorum. İşte iHigh'ı çağıran bir işlev için bir kod parçası

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