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

 
Denis Kirichenko :

개발자 여러분, <Arrays\ArrayObj.mqh>에서 다음 내용이 올바른지 확인하십시오.

공식적으로는 오류가 없습니다. 이 경우 명시적으로 지정되지 않은 경우에도 가상이 암시됩니다.

 
A100 :

공식적으로는 오류가 없습니다. 이 경우 명시적으로 지정되지 않은 경우에도 가상이 암시됩니다.

고맙습니다. 그러나 구문 획일성을 원합니다. 결국, 예를 들어 이미 다음이 있습니다.

 class CArrayDouble : public CArray
  {

   ...

   protected :
   virtual void       QuickSort( int beg, int end, const int mode= 0 );
  }

//+------------------------------------------------------------------+

class CArrayString : public CArray
   {

   ...

   protected :
   virtual void       QuickSort( int beg, int end, const int mode= 0 );
  }

 

마켓 폴더는 전문가들로 가득 차 있습니다.

열하나

하지만 처음 6개만 테스트할 수 있습니다.

열하나

뭐가 문제 야? 그리고 무엇을 할 것인가?

 

CryptDecode 오류( CRYPT_BASE64

 int OnInit ()
{
   string text= "" ;
   string res= "" ;
   string key= "fuyTkH3cd63K9Htrl2xdFgjerPjmla8h" ;

   text= "indicator_chart_window" ;
   if (! CryptEncodeA (text,key,res))
       Print ( "Error: Encode:" , GetLastError ());

   Print (res);

   text= " vj9jDk+GxxB4W1zQc4/rC4OPvttMcgcF5ZFVC7m7l50 = " ;
   if (! CryptDecodeA (text,key,res))
       Print ( "Error: Decode:" , GetLastError ());

   Print (res);
   return ( INIT_SUCCEEDED );
}

//------------------------------------------------------------------
bool CryptEncodeA ( string InputText, string key, string &Output) {
   uchar scr[];
   uchar dst[];
   uchar res[];
   uchar key_aes256[];
   uchar key_base64[];
   StringToCharArray (InputText,scr);
   StringToCharArray (key,key_aes256);
   if ( CryptEncode ( CRYPT_AES256 ,scr,key_aes256,dst)== 0 ) return ( false );
   if ( CryptEncode ( CRYPT_BASE64 ,dst,key_base64,res)== 0 ) return ( false );
   Output = CharArrayToString (res);
   return ( true );
}
//--
bool CryptDecodeA ( string InputText, string key, string &Output) {
   uchar scr[];
   uchar dst[];
   uchar res[];
   uchar key_base64[];
   uchar key_aes256[];
   StringToCharArray (InputText,scr);
   StringToCharArray (key,key_aes256);
   if ( CryptDecode ( CRYPT_BASE64 ,scr,key_base64,dst)== 0 ) return ( false );
   if ( CryptDecode ( CRYPT_AES256 ,dst,key_aes256,res)== 0 ) return ( false );
   Output = CharArrayToString (res);
   return ( true );
}

---

CryptEncodeA 함수는 CryptDecodeA 가 나중에 해독할 수 없는 문자열을 생성하고 MT4에서 오류를 제공합니다: "4029", MT5에서: "4006"

로그 라인: vj9jDk+GxxB4W1zQc4/rC4OPvttMcgcF5ZFVC7m7l50=

마지막 "="를 제거하면 암호가 해독되고 오류가 없습니다.

동시에 php는 정상적으로 그리고 정확하게 복호화합니다:

$secret_key = 'fuyTkH3cd63K9Htrl2xdFgjerPjmla8h';

$s = "indicator_chart_window";
$res = base64_encode(openssl_encrypt($s,"AES-256-ECB",$secret_key,OPENSSL_RAW_DATA));
echo $res.'<br>';

$s= "vj9jDk+GxxB4W1zQc4/rC54fEtkLAsAONkyeprqmMlw=";
$res = openssl_decrypt(base64_decode($s),"AES-256-ECB",$secret_key,OPENSSL_ZERO_PADDING|OPENSSL_RAW_DATA);
echo $res;

---

우리는 서버에서 동일한 라인을 암호화합니다: "indicator_chart_window"

우리는 결과를 얻습니다: " vj9jDk+GxxB4W1zQc4/rC54fEtkLAsAONkyeprqmMlw= "

이 줄을 mql 코드에 삽입하고 다시 오류를 발생시킵니다. 마지막 "="를 제거하면 모든 것이 잘 작동합니다.

---

서버에 임의의 암호화 키를 넣었습니다. "8CpXr3OlVhGs41syHA0+HqZKnatswQjRWn2fKYN4qN4 == "

mql 코드에 한 줄을 삽입했습니다. 오류가 하나 제거되었습니다. "=" 하나만 남기고 - 제대로 작동했습니다(등호가 두 개인 줄이 생성된 키가 무엇인지 - 재현할 수 없음)

답변을 받고 싶은데 제가 잘못 알고 있는 것 같습니다!

 

최적화 중에 메모리가 해제되지 않습니다.

스크린샷은 최적화 프로세스에서 하나의 에이전트만 사용할 때의 메모리 소비를 보여줍니다.

버그는 코드에서 아래와 같은 유사한 구성과 연결되어 있습니다. 여기서는 버그가 나타나지 않습니다.

 input int ii; //Для оптимизации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class My_class
  {
public :
   struct s_Frame_info
     {
       ulong           event_index;
       uchar           frame_id;
       int             data_size;
     };
   struct s_Frame
     {
      s_Frame_info   frame_info;
       uchar           data[];
     };
   s_Frame           _data_local[];

   void               GGG()
     {
       ArrayResize (_data_local, 1024 );
       for ( int i1= 0 ; i1< 1024 ; i1++)
        {
         int len1= ArrayRange (_data_local[i1].data, 0 );
         ArrayResize (_data_local[i1].data,len1+ 1 , 128 * 1024 );
        }
     }
  } *my_class;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   my_class= new My_class();
   my_class.GGG();
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   my_class._data_local[ 0 ].data[ 0 ]= 0 ;
   delete my_class;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
  }
//+------------------------------------------------------------------+

이에 대해 어떻게 생각하십니까?

 
Denis Nikolaev :

마켓 폴더는 전문가들로 가득 차 있습니다.

하지만 처음 6개만 테스트할 수 있습니다.

뭐가 문제 야? 그리고 무엇을 할 것인가?

이것은 4개입니다. 한계에 도달했습니다.

 

test.mq5 대신 test.mqproj가 컴파일되는 이유는 무엇입니까? test.mqproj 프로젝트가 닫혀 있음에도 불구하고

test.mqproj 파일을 삭제하는 것만으로 모든 것이 제자리로 돌아왔습니다.
 

코드베이스의 MQL/Images 폴더에 png 파일을 업로드할 수 있습니까?

png 파일이 허용되는 것 같지만 어떤 이유로 인해 서버로 전송되지 않습니다. 양식을 제출한 후 png 파일은 업로드된 파일 목록에 없습니다.

 
Artyom Trishkin :

이것은 4개입니다. 한계에 도달했습니다.

고마워요, 아르템. 청소가 도움이 되었습니다.

 
Stanislav Korotky :

코드베이스의 MQL/Images 폴더에 png 파일을 업로드할 수 있습니까?

png 파일이 허용되는 것 같지만 어떤 이유로 인해 서버로 전송되지 않습니다. 양식을 제출한 후 png 파일은 업로드된 파일 목록에 없습니다.

추가하겠습니다. EasyAndFastGUI(https://www.mql5.com/ru/code/19703)와 유추하여 모든 사진을 zip 파일로 보관하고 MQL5/Images에 로드했습니다. Zip-archive가 서버에 등록되었지만 컴파일이 여전히 작동하지 않습니다. 리소스 파일이 표시되지 않는다고 표시됩니다. 질문: 그러면 EasyAndFastGUI를 어떻게 컴파일할 수 있었습니까?

아니면 중재자에게 수동으로 제출을 다시 푸시하도록 요청해야 합니까( https://www.mql5.com/en/code/33770/ - 공개적으로 사용할 수 없음)?

EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.