Ссылки на массив - страница 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 и возможно еще какие-то.
О! Точно, в третьем байте четвёртый бит  (отсчёты с нулевого бита)
 

Кстати я там ошибся в своей -- в импорте все лонги надо заменить на инты.

Вопрос -- зачем тебе надо было второе измерение?

Еще вопрос -- откуда 76? sizeof твоей структуры 52 + 2*8 = 68;

 
TheXpert:

Кстати я там ошибся в своей -- в импорте все лонги надо заменить на инты.

Вопрос -- зачем тебе надо было второе измерение?

Я и третье делал ;))  -- для исследования реакции структуры.  Мы ж её исследуем?


Еще вопрос -- откуда 76? sizeof твоей структуры 52 + 2*8 = 68;

А, это я реальный sizeof структуры массива смотрел, для этого после массива в конец дописал известные данные (
store.reserved = 0xEEEEEEEEEEEEEEEE;
) и просканил насквозь.
 

Еще предположения возможных флагов -- статический\динамический и индикаторный\обычный

статический\динамический отпадает, статический типа "long x[5]" записывается не как структура, а как массив лонгов.

 

Вобщем пока так:

// 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 точно не принесет. поэтому ковырять самим.
Для начала нужно понять, ЗАЧЕМ? И какая от этого польза?

Да и спасибо участвующим, благодаря сообщениям в этой ветке обнаружил, что в справке описание устарело...
 
mql5:

Да и спасибо участвующим, благодаря сообщениям в этой ветке обнаружил, что в справке описание устарело...

Ильяс, ну вот как это назвать :))

Я так понял что вся команда МК за животы держалась, пока смотрела на потуги поиска.  А справка была так близко... :)

зато вы видите, что на форуме реальные профи, которые только по циферкам могут восставноить структуру и понять что за что отвечает.


PS

а справку уже поправили?