오류, 버그, 질문 - 페이지 2132

 
fxsaber :

작성자가 시간제 사회자일 때.

오히려 사회자와 시간제 코더입니다.

 
fxsaber :
KB의 어드바이저 작성자가 해당 토론에서 코드의 오류가 지적된 타사 주석을 제거하는 것이 올바른가요?

당연히 아니지.

 
fxsaber :
KB의 고문 작성자가 해당 토론에서 코드의 오류가 지적된 타사 주석을 제거하는 것이 올바른가요?
당연히 아니지. 이러한 의견은 이러한 오류를 수정하는 데 기여합니다. 누락 또는 삭제는 KB를 가난한 가이드로 만듭니다.
 

MQL에서 모든 것을 반대로 하는 요점이 무엇인지 이해하지 못했습니다.

C++ VS2017
MQL
printf ( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
실제로 MQL::printf는 CPP::wprintf에 해당하지만 MQL에는 CPP::printf와 유사한 것이 없습니다.
 
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에 해당하지만 MQL에는 CPP::printf와 유사한 것이 없습니다.
MQL5는 모두 유니코드이므로 1바이트 문자열을 완전히 포기했습니다.
 
Renat Fatkhullin :
MQL5는 모두 유니코드이므로 1바이트 문자열을 완전히 포기했습니다.

나는 그것을 완전히 믿지 않는다! 모든 것이 작동 중입니다.

 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는 살아있습니다!

 
A100 :

나는 그것을 완전히 믿지 않는다! 모든 것이 작동 중입니다.

결과: Ansi는 살아있습니다!

바이너리를 유니코드로 패키징한 다음 시스템 기능을 통해 호출 시 폭발 위험을 감수하는 것은 비합리적입니다.

이러한 시도는 나중에 필터링할 가능성이 높습니다.

 
Renat Fatkhullin :

시스템 기능을 통해 호출 시 폭발 위험을 감수하는 것은 현명하지 않습니다.

문자열은 null로 끝나는 것이 보장되므로 과장하지 마십시오. 게다가 멀티바이트 문자와 함께 1바이트 문자는 실제로 유니코드의 일부이며 MQL에서도 이 모든 것이 잘 작동합니다. 덕분에 예를 들어 일반( 그리고 그 끔찍한 고정 폭이 아닙니다) 글꼴입니다.

많은 시스템 함수가 정확히 uchar[]를 필요로 한다는 사실에도 불구하고 사용자가 잘못 채우는 것을 두려워하여 uchar[] 인수가 있는 dll 함수의 호출을 금지하는 것과 같습니다(예: 0으로 끝나지 않음). 그리고 ushort[]가 아닙니다(그런데 잘못된 채우기일 수도 있음)

 

두 번째 줄 - 인간(고정폭 아님) 글꼴로 출력합니다. 보시다시피 ::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 );
     }
  }

결과적으로 Symbol() 함수 에서 반환된 문자열이 기호 매개변수로 전달되었지만 오류 4301: "알 수 없는 기호"가 발생합니다. 다음은 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++;
        }
     }