배열 참조 - 페이지 5

 
TheXpert :
오 내 팬티야, 난 이제 막 파기 시작했어.

자, 그럼 내 굴착기를 잡아, 조금 더 편안하게 만들었어요

 #import "msvcrt.dll"
   long memcpy( uchar &dst[], long &src, int cnt);
   long memcpy( uchar &dst[], int &src, int cnt);
#import

struct ArrayStore
{
   long offset;
   double x[][ 15 ];   // == 0x5800 0100 0800
   // long x[][15];  // == 0x5500 0100 0800
   // ulong x[][15];  // == 0x5600 0100 0800
   
   // int x[][15];  // == 0x5200 0100 04
   // uint x[][15];  // == 0x5300 0100 04
   // short x[][15]; // == 0x5000 0100 02
   // ushort x[][15]; // == 0x4F00 0100 02
   //char x[][15];  // == 0x4D00 0100 01
   //uchar x[][15];  // == 0x4E00 0100 01
   long reserved;

};

#define N 76
// sizeof(ArrayStore) == 60

void OnStart ()
{
   ArrayStore store;
   ArrayResize (store.x, 0x11 , 0x22 );
   store.offset = 0 ;
   store.reserved = 0xEEEEEEEEEEEEEEEE ;
   
   uchar array[N];
   ArrayInitialize (array, 0 );
   
   memcpy(array, store.offset, N);
   Print ( "===== Start =====" );
   for ( int j= 0 ;j< 8 ;j++)
   {
     string s= "" ;
     for ( int i = 0 ; i < 8 ; i++)
     {
        s = s + ((i% 4 == 0 )? " : " : " " )+ StringFormat ( "%.2X" , array[i+ 8 *j+ 8 ]);
     }
     Print (s);
   }
   
ArrayResize (store.x , 31 , 3 );    

   memcpy(array, store.offset, N);
   Print ( "=====  =====" );
   for ( int j= 0 ;j< 8 ;j++)
   {
     string s= "" ;
     for ( int i = 0 ; i < 8 ; i++)
     {
        s = s + ((i% 4 == 0 )? " : " : " " )+ StringFormat ( "%.2X" , array[i+ 8 *j+ 8 ]);
     }
     Print (s);
   }
   
ArrayResize (store.x , 0 , 7 );    

   memcpy(array, store.offset, N);
   Print ( "=====  =====" );
   for ( int j= 0 ;j< 8 ;j++)
   {
     string s= "" ;
     for ( int i = 0 ; i < 8 ; i++)
     {
        s = s + ((i% 4 == 0 )? " : " : " " )+ StringFormat ( "%.2X" , array[i+ 8 *j+ 8 ]);
     }
     Print (s);
   }
   Print ( "===== End =====" );
}
 
TheXpert :
또한 AsSeries 플래그와 다른 플래그도 있어야 합니다.
영형! 정확히는 세 번째 바이트에서 네 번째 비트(비트 0부터 계산)
 

그건 그렇고, 나는 내 실수를 저질렀습니다. import 에서 모든 long은 int로 대체되어야 합니다.

문제는 왜 2차원이 필요했느냐는 것입니다.

또 다른 질문 - 76은 어디에서 왔습니까? 구조의 크기 52 + 2*8 = 68;

 
TheXpert :

그건 그렇고, 나는 실수를 저질렀습니다. 가져오기에서 모든 long은 int로 대체되어야 합니다.

문제는 왜 2차원이 필요했느냐는 것입니다.

나는 또한 세 번째 것 ;)) - 구조의 반응을 연구했습니다. 우리가 그것을 연구하고 있습니까?


또 다른 질문 - 76은 어디에서 왔습니까? 구조의 크기 52 + 2*8 = 68;

그리고 배열 구조의 실제 크기를 살펴보았는데, 이를 위해 배열 뒤에 알려진 데이터를 끝에 추가했습니다(
store.reserved = 0xEEEEEEEEEEEEEEEE ;
) 및 스캔을 통해.
 

가능한 플래그에 대한 추가 제안 -- 정적/동적 및 표시기/정상

static \ dynamic이 사라지고 정적 유형 "long x[5]"는 구조가 아니라 long의 배열로 작성됩니다.

 

지금까지:

 // Array Struct
struct Array
{
   short type; // номер типа, вначале стандартные, потом пользовательские, каждому пользовательскому типу присваивается свой порядковый номер.
   short flags; // тут пока хз, есть только знание о флаге AsSeries
   int sizeoftype; // размер типа == sizeof(type)
   int dim1size; // размер 1-й рамерности
   int dim2size; // размер 1-й рамерности
   int dim3size; // размер 1-й рамерности
   int dim4size; // размер 1-й рамерности
   int reservedsize; // размер с учетом резерва (именно столько выделяется памяти)
   int ptr; // указатель
   int reserved1; //
   int reserved2; //
   int reserved3; //
   int reserved4; //
   int reserved5; //
};

이론적으로 이것은 아이디어에 대한 눈 뒤에 있어야하며 구현하려고 할 수 있습니다.

나는 오늘을 위해 모든 것입니다.

 

시간을 아쉬워하지 마세요...

MQ는 이러한 작업을 수행해야 합니다. 그렇지 않으면 예를 들어 새 빌드의 릴리스와 함께 이 모든 작업이 소진될 수 있습니다.

그러한 개선의 필요성을 정확하고 현명하게 정당화하는 것이 훨씬 더 논리적일 것입니다. 그러면 MQ가 "주문에 따라" 이를 수행했을 것입니다.

 
komposter :

그러한 개선의 필요성을 정확하고 현명하게 정당화하는 것이 훨씬 더 논리적일 것입니다. 그러면 MQ가 "주문에 따라" 이를 수행했을 것입니다.

이 MQ는 확실히 돈을 가져오지 않을 것입니다. 그래서 자신을 선택합니다.
 
sergeev :
이 MQ는 확실히 돈을 가져오지 않을 것입니다. 그래서 자신을 선택합니다.
먼저 WHY를 이해해야 합니다. 그리고 그게 무슨 소용입니까?

그리고 참가자들 덕분에 이 스레드의 메시지 덕분에 도움말의 설명 이 구식이라는 것을 알았습니다...
 
mql5 :

그리고 참가자들 덕분에 이 스레드의 메시지 덕분에 도움말의 설명 이 구식이라는 것을 알았습니다...

Ilyas, 글쎄, 그것이 그것을 부르는 방법 :))

MK 팀 전체가 수색 시도를 보면서 배를 잡고 있었던 것으로 알고 있습니다. 그리고 도움이 너무 가까웠어요... :)

그러나 숫자로만 구조를 복원하고 무엇에 책임이 있는지 이해할 수있는 포럼에 진정한 전문가가 있음을 알 수 있습니다.


추신

이미 수정되었나요?